JSON & CJsonObject 入门笔记

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;

}
原文地址:https://www.cnblogs.com/mollnn/p/13669028.html