C++ JSON解析库RapidJSON

本文介绍了一个基于RapidJSON库的C++示例程序,该程序能够解析并打印JSON文件中的数据,同时还能创建新的JSON数据结构并输出。通过这个例子,读者可以了解如何使用RapidJSON来操作JSON数据。

https://github.com/Tencent/rapidjson

 

jsontext.txt

{
        "result" :
        [
                {
                        "face_id" : "a9cebf8d5ae6fff514d8d2d8e07fa55b",
                        "img_id" : "12.jpg",
                        "people_name" : "白活",
                        "similarity" : 100
                },
                {
                        "face_id" : "7f2de0e85bede3171c839d0dcabd849f",
                        "img_id" : "6.jpg",
                        "people_name" : "布伊什",
                        "similarity" : 55.379097
                },
                {
                        "face_id" : "40ebb31e8af7237a73dec9f242885a7e",
                        "img_id" : "2.jpg",
                        "people_name" : "布衣食",
                        "similarity" : 52.59766
                }
        ]
}

 

rapidjson_test.cpp

#include <iostream>
#include <fstream>
#include <iomanip>
#include "rapidjson/document.h"
#include "rapidjson/stringbuffer.h"
#include "rapidjson/writer.h"
int main()
{
    using namespace std;
    using namespace rapidjson;
    cout << "parsing test" << endl;
    string line, jsonText;
    ifstream ifs("json_text.txt");
    while (getline(ifs, line))
        jsonText.append(line);
    Document document;
    document.Parse(jsonText.c_str());
    const auto &array = document["result"].GetArray();
    for (const auto &e : array)
    {
        const auto &faceId = e["face_id"].GetString();
        const auto &imgId = e["img_id"].GetString();
        const auto &peopleName = e["people_name"].GetString();
        const auto &similarity = e["similarity"].GetDouble();
        cout << setprecision(15) << "face_id:\t" << faceId << endl;
        cout << "img_id:\t\t" << imgId << endl;
        cout << "people_name:\t" << peopleName << endl;
        cout << "similarity:\t" << similarity << endl << endl;
    }
    cout << endl << "generating test" << endl;
    Document d;
    d.SetObject();
    Document::AllocatorType &allocator = d.GetAllocator();
    Value arr(kArrayType);
    Value elem1(kObjectType);
    elem1.AddMember("name", "沃夫", allocator);
    elem1.AddMember("gender", "Male", allocator);
    elem1.AddMember("age", 24, allocator);
    arr.PushBack(elem1, allocator);
    Value elem2(kObjectType);
    elem2.AddMember("name", "布伊什", allocator);
    elem2.AddMember("gender", "Female", allocator);
    elem2.AddMember("age", 26, allocator);
    arr.PushBack(elem2, allocator);
    Value elem3(kObjectType);
    elem3.AddMember("name", "布衣食", allocator);
    elem3.AddMember("gender", "Male", allocator);
    elem3.AddMember("age", 28, allocator);
    arr.PushBack(elem3, allocator);
    d.AddMember("result", arr, allocator);
    StringBuffer strBuf;
    Writer<StringBuffer> writer(strBuf);
    d.Accept(writer);
    cout << strBuf.GetString() << endl;
    return 0;
}

转载于:https://www.cnblogs.com/buyishi/p/8598736.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值