一.json.hpp
这个用法很简单,之前也有过介绍,json.hpp下载地址在之前的博客
二.rapidjson
因为json.hpp不能读取中文,所以被逼无奈找了rapidjson,说真的还是json.hpp好用,和c语言的数组一样,用着很方便。而且rapidjson好像有很多用法,所以找了一篇大神的博客,他的写法很简单也很实用,我在他的基础上修改了一下。需要去GitHub上下载rapidjson,里面包含了头文件。
代码如下:
#include <iostream>
#include <string>
#include "rapidjson/stringbuffer.h"
#include "rapidjson/writer.h"
using namespace std;
void Serialize_1()
{
rapidjson::StringBuffer strBuf;
rapidjson::Writer<rapidjson::StringBuffer> writer(strBuf);
writer.StartObject();
//1. 整数类型
writer.Key("Int");
writer.Int(1);
//2. 浮点类型
writer.Key("Double");
writer.Double(12.0000001);
//3. 字符串类型
writer.Key("String");
writer.String("This is a string");
//4. 结构体类型
writer.Key("Object");
writer.StartObject();
writer.Key("name");
writer.String("qq849635649");
writer.Key("age");
writer.Int(25);
writer.EndObject();
//5. 数组类型
//5.1 整型数组
writer.Key("IntArray");
writer.StartArray();
//顺序写入即可
writer.Int(10);
writer.Int(20);
writer.Int(30);
writer.EndArray();
//5.2 浮点型数组
writer.Key("DoubleArray");
writer.StartArray();
for (int i = 1; i < 4; i++)
{
writer.Double(i * 1.0);
}
writer.EndArray();
//5.3 字符串数组
writer.Key("StringArray");
writer.StartArray();
writer.String("one");
writer.String("two");
writer.String("three");
writer.EndArray();
//5.4 混合型数组
//这说明了,一个json数组内容是不限制类型的
writer.Key("MixedArray");
writer.StartArray();
writer.String("one");
writer.Int(50);
writer.Bool(false);
writer.Double(12.005);
writer.EndArray();
//5.5 结构体数组
writer.Key("People");
writer.StartArray();
for (int i = 0; i < 3; i++)
{
writer.StartObject();
writer.Key("name");
writer.String("qq849635649");
writer.Key("age");
writer.Int(i * 10);
writer.Key("sex");
writer.Bool((i % 2) == 0);
writer.EndObject();
}
writer.EndArray();
writer.EndObject();
string data = strBuf.GetString();
cout << data << endl;
}
int main()
{
//Serialize_1();
rapidjson::StringBuffer strBuf;
rapidjson::Writer<rapidjson::StringBuffer> writer(strBuf);
writer.StartObject();
/*
* json里面嵌套json,而且外层键值要用变量, 所以写了这段代码
* Serialize_1()里面有用法,相比于其他用法更易于理解
*/
for (int i = 0; i < 5; i++)
{
string s = "car" + to_string(i);
char* k = (char*)s.data();
writer.Key(k); //支持char* 不支持string
writer.StartObject();
writer.Key("PlatNum");
writer.String("\u4EAC 2343"); //4EAC is 京
writer.Key("color");
writer.String("black");
writer.EndObject();
}
writer.EndObject();
string data = strBuf.GetString();
cout << data << endl;
system("pause");
return 0;
}