知方号

知方号

C、C++中对json格式数据的解析和封装

C、C++中对json格式数据的解析和封装

C:首先需要调库:#include Json的数据结构介绍:/* The cJSON structure: */typedef struct cJSON{/*next/prev允许您遍历数组/对象链。或者,使用GetArraySize/GetArrayItem/GetObjectItem */struct cJSON *next;struct cJSON *prev;/* 数组或对象项将有一个子指针指向数组/对象中的项链。 */struct cJSON *child;/* 项目的类型,如上所述。*/int type;/* 字符串, if type==cJSON_String */char *valuestring;/* 数值, if type==cJSON_Number */int valueint;/* 小数数据, if type==cJSON_Number */double valuedouble;/* 项的名称字符串,如果此项是的子项,或在对象的子项列表中。*/char *string;} cJSON; Json格式文本解析:#define TEST2 "{ "auth": "auc_d0dd49997dd17b12f76b74fe51d0de3fd772718b", "sessionId": "5129110798518519880764729435382" }"char* buffer = TEST2;cJSON* json = cJSON_Parse(buffer);cJSON* name = cJSON_GetObjectItem(json, "name");cJSON* num = cJSON_GetObjectItem(json, "num");printf("%s,%s",name->valuestring,num->valueint);假设文本为:需要解析中间的pinyin,textContent,title"Data": { "listItems":[{"htmlView":"http://hanyu.baidu.com/s?wd=一飞冲天&ptype=zici","mediaId":"6f7af22ba4613b869f455d569c204c69","selfData":"{"interpretation":"鸟儿展翅一飞,直冲云霄。比喻平时没有特殊表现,一下做出了惊人的成绩。","lemma":"一飞冲天","pinyin":"[yī fēi chōng tiān]"} ","textContent":"鸟儿展翅一飞,直冲云霄。比喻平时没有特殊表现,一下做出了惊人的成绩。","title":"一飞冲天"}] }cJSON* Data = cJSON_GetObjectItem(json, "Data");cJSON* ListItems = cJSON_GetObjectItem(Data, "listItems");cJSON* Json_Array = cJSON_GetArrayItem(ListItems, 0);//其中[]里面为数组需要用cJSON_GetArrayItem,0代表第一个。cJSON* TextContent = cJSON_GetObjectItem(Json_Array, "textContent");cJSON* Title = cJSON_GetObjectItem(Json_Array, "title");cJSON* SelfData = cJSON_GetObjectItem(Json_Array, "selfData");cJSON* Src = cJSON_Parse(SelfData->valuestring);//selfData数据解析出来为字符串,需要再次解析为json数据才能再次解析cJSON* Pinyin = cJSON_GetObjectItem(Src, "pinyin"); Json格式文本封装:将多条字符串合成一条json格式数据const char* client_id = "12345678";const char* sessionid = "abcdefg";cJSON *root = cJSON_CreateObject();cJSON_AddStringToObject(root, "authCode", client_id);cJSON_AddStringToObject(root, "sessionId", sessionid);//这里的添加处理字符串以外还可以添加很多类型的数据char *auth_resp_info = cJSON_Print(root);printf("%s,%s",auth_resp_info); C++封装json格式数据:

创建一个C++类来封装这个JSON数据:

#include #include #include class Address {public: std::string street; std::string city;};class Person {public: std::string name; int age; Address address; std::vector hobbies;};int main() { Person person; person.name = "John"; person.age = 30; person.address.street = "123 Main St"; person.address.city = "New York"; person.hobbies = {"Reading", "Hiking"}; // 将Person对象转换为JSON字符串 nlohmann::json j; j["person"]["name"] = person.name; j["person"]["age"] = person.age; j["person"]["address"]["street"] = person.address.street; j["person"]["address"]["city"] = person.address.city; j["person"]["hobbies"] = person.hobbies; std::string jsonStr = j.dump(); std::cout {"DSN","5ca439320d7b4adfb965a4442c791c33"}};json_data["Payload"] = {{"blobData",{{"longitude",""},{"latitude",""}}},{"domain","weather"},{"intent","GetGeneralMsgRequest"}};最后形成: JSON string: { "Header": { "DSN": "5ca439320d7b4adfb965a4442c791c33" }, "Payload": { "blobData": { "latitude": "", "longitude": "" }, "domain": "weather", "intent": "GetGeneralMsgRequest" } }或者可以这样:也可以形成上面的数据json j2 = R"( "Header": { "DSN": "5ca439320d7b4adfb965a4442c791c33" }, "Payload": { "blobData": { "latitude": "", "longitude": "" }, "domain": "weather", "intent": "GetGeneralMsgRequest" })"_json;

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至lizi9903@foxmail.com举报,一经查实,本站将立刻删除。