| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132 | 
							- #include "JsonUtils.h"
 
- namespace JsonUtil {
 
- 	cJSON * obj2json(const JsonType &obj) {
 
- 		
 
- 		cJSON * pJsonRoot = NULL;
 
- 		JsonList jsonList;
 
- 		JsonMap jsonMap;
 
- 		JsonVector jsonvec;
 
- 		switch (obj.type()) {
 
- 		case JsonType::VoidType:
 
- 			pJsonRoot = cJSON_CreateNull();
 
- 			break;
 
- 		case JsonType::NumberType:
 
- 			pJsonRoot = cJSON_CreateNumber(obj.toNumber());
 
- 			break;
 
- 		case JsonType::BooleanType:
 
- 			pJsonRoot = cJSON_CreateBool(obj.toBoolean());
 
- 			break;
 
- 		case JsonType::StringType:
 
- 			pJsonRoot = cJSON_CreateString(obj.toString().c_str());
 
- 			break;
 
- 		case JsonType::ListType:
 
- 			jsonList.clear();
 
- 			jsonList = obj.toList();
 
- 			pJsonRoot = cJSON_CreateArray();
 
- 			for (JsonList::const_iterator iter = jsonList.begin();
 
- 				iter != jsonList.end(); ++iter) {
 
- 				cJSON_AddItemToArray(pJsonRoot, obj2json(*iter));
 
- 			}
 
- 			break;
 
- 		case JsonType::MapType:
 
- 			jsonMap.clear();
 
- 			jsonMap = obj.toMap();
 
- 			pJsonRoot = cJSON_CreateObject();
 
- 			for (JsonMap::const_iterator iter = jsonMap.begin();
 
- 				iter != jsonMap.end(); ++iter) {
 
- 				cJSON_AddItemToObject(pJsonRoot, iter->first.toString().c_str(), obj2json(iter->second));
 
- 			}
 
- 			break;
 
- 		case JsonType::VectorType:
 
- 			jsonvec.clear();
 
- 			jsonvec = obj.toVector();
 
- 			pJsonRoot = cJSON_CreateArray();
 
- 			for (JsonVector::const_iterator it = jsonvec.begin(); it != jsonvec.end(); ++it) {
 
- 				cJSON_AddItemToArray(pJsonRoot, obj2json(*it));
 
- 			}
 
- 			break;
 
- 		default:
 
- 			break;
 
- 		}
 
- 		return pJsonRoot;
 
- 	}
 
- 	JsonType json2obj(const cJSON *pJsonRoot) {
 
- 		
 
- 		cJSON *pChild = NULL;
 
- 		JsonList jsonList;
 
- 		JsonMap jsonMap;
 
- 		
 
- 		if (pJsonRoot) {
 
- 			switch (pJsonRoot->type) {
 
- 			case cJSON_NULL:
 
- 				return JsonType();
 
- 				break;
 
- 			case cJSON_False:
 
- 				return JsonType(false);
 
- 				break;
 
- 			case cJSON_True:
 
- 				return JsonType(true);
 
- 				break;
 
- 			case cJSON_Number:
 
- 				return JsonType(pJsonRoot->valuedouble);
 
- 				break;
 
- 			case cJSON_String:
 
- 				return JsonType(pJsonRoot->valuestring);
 
- 				break;
 
- 			case cJSON_Array:
 
- 				jsonList.clear();
 
- 				pChild = pJsonRoot->child;
 
- 				while (pChild) {
 
- 					jsonList.push_back(json2obj(pChild));
 
- 					pChild = pChild->next;
 
- 				}
 
- 				return JsonType(jsonList);
 
- 				break;
 
- 			case cJSON_Object:
 
- 				jsonMap.clear();
 
- 				pChild = pJsonRoot->child;
 
- 				while (pChild) {
 
- 					jsonMap.insert(JsonMap::value_type(JsonType(pChild->string), json2obj(pChild)));
 
- 					pChild = pChild->next;
 
- 				}
 
- 				return JsonType(jsonMap);
 
- 				break;
 
- 			default:
 
- 				break;
 
- 			}
 
- 		}
 
- 		return JsonType();
 
- 	}
 
- 	string objectToString(const JsonType &obj) {
 
- 		cJSON *pJson = obj2json(obj);
 
- 		string str;
 
- 		if (pJson) {
 
- 			const char *pCh = cJSON_PrintUnformatted(pJson);
 
- 			if (pCh) {
 
- 				str = pCh;
 
- 				free((void*)pCh);
 
- 			}
 
- 			cJSON_Delete(pJson);
 
- 		}
 
- 		return str;
 
- 	}
 
- 	JsonType stringToObject(const string &json) {
 
- 		cJSON *pJson = cJSON_Parse(json.c_str());
 
- 		JsonType obj = json2obj(pJson);
 
- 		if (pJson) {
 
- 			cJSON_Delete(pJson);
 
- 		}
 
- 		return obj;
 
- 	}
 
- }
 
 
  |