【问题标题】:how to write nested json using jsoncpp in c++如何在 C++ 中使用 jsoncpp 编写嵌套的 json
【发布时间】:2014-02-19 09:09:17
【问题描述】:
{
    "id": "1234567890",
    "seatbid": 
    [
        {
            "bid" : 
            [
                {
                    "id": "1",
                    "crid" : "creative112",
                }
            ],
            "seat" : "512"
        }
    ]
}

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

【问题讨论】:

  • 到目前为止你尝试过什么?有什么效果?什么没有起作用?另外,请阅读the Stack Overflow question checklist。您可能还想了解SSCCE 是什么。
  • 事实上我们坚持这样做。

标签: c++ json jsoncpp


【解决方案1】:

这是一个简单的解决方案:

#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);  
}

【讨论】:

    【解决方案2】:

    如果您打算将一个嵌套在另一个内部,例如:

    {
       "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;
    }
    

    【讨论】:

      猜你喜欢
      • 2017-08-29
      • 2023-03-15
      • 1970-01-01
      • 2016-07-19
      • 2012-10-17
      • 2017-10-07
      • 1970-01-01
      • 2021-12-18
      • 1970-01-01
      相关资源
      最近更新 更多