JSON: JavaScript Object Notation
语法规则
数据存储在名称-值对中,数据由逗号分隔,中括号保存数组,大括号保存对象。
"字段名" : 字段值
{"name":"Alice", "ID":1}
"sites":[{"name":"A"}, {"name":"B"}]
在 JS 中,可以用 parse()
和 stringify()
方法来实现字符串与对象之间的转化。
在 C++ 中,我们可以用 JSONObject 来维护 JSON 格式的数据结构,实现字符串和 JSON 对象之间的转化。
一个例子
#include <iostream>
#define _CRT_SECURE_NO_WARNINGS
#include "CJsonObject.hpp"
#include <vector>
using namespace std;
using namespace neb;
struct Point
{
int x;
int y;
CJsonObject ToJson()
{
CJsonObject objResult;
objResult.Add("x", x);
objResult.Add("y", y);
return objResult;
}
void FromJson(CJsonObject objPoint)
{
objPoint.Get("x", x);
objPoint.Get("y", y);
}
};
struct PointArray
{
vector<Point> vec;
void Insert(Point point)
{
vec.push_back(point);
}
CJsonObject ToJson()
{
CJsonObject objArray;
for (auto p : vec)
{
objArray.Add(p.ToJson());
}
return objArray;
}
void FromJson(CJsonObject objArray)
{
string nJsonKey;
CJsonObject nJsonValue;
vec.clear();
int nSize = objArray.GetArraySize();
for (int i = 0; i < nSize; i++)
{
CJsonObject objPoint = objArray[i];
Point point;
point.FromJson(objPoint);
vec.push_back(point);
}
}
};
int main()
{
PointArray pa;
Point p;
p.x = 1;
p.y = 1;
pa.Insert(p);
p.x = 2;
p.y = 2;
pa.Insert(p);
CJsonObject obj = pa.ToJson();
cout << obj.ToString() << endl;
PointArray cpa;
cpa.FromJson(obj);
obj = cpa.ToJson();
cout << obj.ToString() << endl;
}