cjson库

mac2022-06-30  120

json结构体解析##

json是一种存储以及交换文本信息的语法。类似XML。答案是比 XML 更小、更快,更易解析。 json的书写格式是 名称/值对。 名称/值对包括字段名称(在双引号中),后面写一个冒号,然后是值: 例子:“firstName” : "John"

json的值

JSON 值可以是: **- 数字(整数或浮点数)

字符串(在双引号中)逻辑值(true 或 false)数组(在方括号中)对象(在花括号中)null**

json对象

JSON 对象在花括号中书写。对象可以包含多个名称/值对: { “firstName”:“John” , “lastName”:“Doe” }

json数组

json数组书写在方括号中。且数组可以包含多个对象。例: { “students”:[ {“name” :“kangkang”,“age”:“18”}, {“name” :“jane”,“age”:“19”}, {“name” :“kate”,“age”:“20”}, ] } 上例中students是一个数组,包含三个对象。

创建json结构体

本例子采用cjson库生成json数据。

#include <iostream> #include <string> using namespace std; #include "cJSON.h" /* { "ver": "v1.0.0", "did": "066EFF3638324D4D43183319", "hardware_ver": "V1.0.0", "software_ver": "V1.0.0", "data": { "status": 1, "material": true, "power_on": true, "qty": 123 }, "dt": "2017-11-04T05:15:52" } */ /* { "students":[ {"name" :"kangkang","age":"18"}, {"name" :"jane","age":"19"}, {"name" :"kate","age":"20"}, ] } */ #include <fstream>//生成文件 int main(void) { //cJSON *pRoot = cJSON_CreateObject();//创建json的根节点 //首先创建students 在创建 数组 /* //student.json中 { "students":[ {"name" :"kangkang","age":"18"}, {"name" :"jane","age":"19"}, {"name" :"kate","age":"20"}, ] } */ /*cJSON* pValue = cJSON_CreateArray();//数组对象 cJSON* k1 = cJSON_CreateObject();//数组对象 cJSON* v1 = cJSON_CreateString("kangkang"); cJSON* v2 = cJSON_CreateNumber(18); cJSON_AddItemToObject(k1, "name", v1); cJSON_AddItemToObject(k1, "age", v2); cJSON* k2 = cJSON_CreateObject();//数组对象 cJSON* v21 = cJSON_CreateString("jane"); cJSON* v22 = cJSON_CreateNumber(19); cJSON_AddItemToObject(k2, "name", v21); cJSON_AddItemToObject(k2, "age", v22); cJSON* k3 = cJSON_CreateObject();//数组对象 cJSON* v31 = cJSON_CreateString("kate"); cJSON* v32 = cJSON_CreateNumber(20); cJSON_AddItemToObject(k3, "name", v31); cJSON_AddItemToObject(k3, "age", v32); cJSON_AddItemToArray(pValue, k1); cJSON_AddItemToArray(pValue,k2); cJSON_AddItemToArray(pValue, k3); cJSON_AddItemToObject(pRoot, "students", pValue); cout << cJSON_Print(pRoot) << endl;; string outBuf(cJSON_Print(pRoot));//json流 ofstream outFile("test.json", ios::out); if (!outFile.is_open()) { return -1; } outFile << outBuf; outFile.close(); cJSON_free(pRoot); cJSON_free(pValue); */ /* //test.jon中 { "ver": "v1.0.0", "did": "066EFF3638324D4D43183319", "hardware_ver": "V1.0.0", "software_ver": "V1.0.0", "data": { "status": 1, "material": true, "power_on": true, "qty": 123 }, "dt": "2017-11-04T05:15:52" } */ cJSON* pRoot = cJSON_CreateObject(); cJSON_AddItemToObject(pRoot,"ver",cJSON_CreateString("v1.0.0")); cJSON_AddItemToObject(pRoot, "did", cJSON_CreateString("066EFF3638324D4D43183319")); cJSON_AddItemToObject(pRoot, "hardware_ver", cJSON_CreateString("v1.0.0")); cJSON_AddItemToObject(pRoot, "software_ver", cJSON_CreateString("v1.0.0")); //data数组 cJSON* pDataItem = cJSON_CreateObject(); cJSON_AddItemToObject(pDataItem, "status", cJSON_CreateNumber(1)); cJSON_AddItemToObject(pDataItem, "material", cJSON_CreateBool(true)); cJSON_AddItemToObject(pDataItem, "power_on", cJSON_CreateBool(false)); cJSON_AddItemToObject(pDataItem, "qty", cJSON_CreateNumber(456)); cJSON_AddItemToObject(pRoot, "data", pDataItem); cJSON_AddItemToObject(pRoot, "author", cJSON_CreateString("zmf")); cout << cJSON_Print(pRoot) << endl;; string outBuf(cJSON_Print(pRoot));//json流 ofstream outFile("test.json", ios::out); if (!outFile.is_open()) { return -1; } outFile << outBuf; outFile.close(); system("pause"); return 0; }
最新回复(0)