如何在 C++ 中使用 JSON CPP 编写嵌套 JSON

how to write nested json using jsoncpp in c++

本文关键字:JSON CPP 嵌套 C++      更新时间:2023-10-16
{
    "id": "1234567890",
    "seatbid": 
    [
        {
            "bid" : 
            [
                {
                    "id": "1",
                    "crid" : "creative112",
                }
            ],
            "seat" : "512"
        }
    ]
}

我是 c++ 和 Jsoncpp 的新手。我可以使用jsoncpp编写普通的json,但我不能像上面那样编写嵌套的jason。你能教我如何在 c++ 中使用 jsoncpp 编写嵌套的 json 吗

这是一个向前推进的解决方案:

#include <json/json.h>
int main()
{   
    Json::Value bid0;
    bid0["id"] = "1";
    bid0["crid"] = "creative112";
    Json::Value bid;
    bid.append(bid0);
    Json::Value seatbid0;
    seatbid0["bid"] = bid;
    seatbid0["seat"] = "512";
    Json::Value seatbid;
    seatbid.append(seatbid0);
    Json::Value root;
    root["id"] = "1234567890";  
    root["seatbid"]=seatbid;
    Json::StyledWriter styledWriter;
    std::cout << styledWriter.write(root);  
}
如果您

打算将一个嵌套在另一个中,例如:

{
   "id" : "1234567890",
   "seatbid" : {
      "bid" : {
         "crid" : "creative112",
         "id" : "1"
      },
      "seat" : "512"
   }
}

以下代码可能是您要查找的代码:

#include <iostream>
#include "JsonCpp/jsoncpp.h"
using namespace std;
class IdCrid : public IJsonSerializable {
public:
    IdCrid() :id(""), crid("") {}
    virtual void Serialize(Json::Value& root) {
        root["id"] = id;
        root["crid"] = crid;
    }
    virtual void Deserialize(Json::Value& root) {
    }
    string id;
    string crid;
};
class SeatBid : public IJsonSerializable {
public:
    SeatBid() :seat("") {}
    virtual void Serialize(Json::Value& root) {
        bid.Serialize(root["bid"]);
        root["seat"] = seat;
    }
    virtual void Deserialize(Json::Value& root) {
    }
    string  seat;
    IdCrid bid;
};

class IdSeatbid : public IJsonSerializable {
public:
    IdSeatbid() :id(""){}
    virtual void Serialize(Json::Value& root) {
        root["id"] = id;
        seatbid.Serialize(root["seatbid"]);
    }
    virtual void Deserialize(Json::Value& root) {
    }
    string id;
    SeatBid seatbid;
};

void printJSON() {
    IdCrid ic;
    ic.id = "1";
    ic.crid = "creative112";
    SeatBid sb;
    sb.bid = ic;
    sb.seat = "512";
    IdSeatbid jp;
    jp.id = "1234567890";
    jp.seatbid = sb;
    string outString = "";
    CJsonSerializer::Serialize(&jp, outString);
    fprintf(stdout, "%s", outString.c_str());
}
int main()
{
    printJSON();
    return 0;
}