cjson库

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;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一路初心向前

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值