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;
}