在JsonCpp中读取json的数组

时间:2017-09-13 17:52:33

标签: c++ jsoncpp

我尝试为我的程序编写一个简单的JSON阅读器,然后使用JsonCpp。我的网络服务器上有这个JSON:

{
  "return":
  {
    "status":200,
    "message":"Accepted"
  },
  "entries":
  [
   {
     "messageid":185002992,
     "message":"CplusItsGood",
     "status":1,
     "statustext":"test",
     "sender":"1234567",
     "receptor":"123456789",
     "date":1234,
     "cost":140
   }
  ]
}

这是我的C ++代码:

    Json::Reader reader;
    Json::Value root;

    reader.parse(jsonContext, root, false);

    const Json::Value entriesArray = root["return"]["entries"];

    int A = entriesArray["sender"].asInt();

    cout << A;

仅打印 0 ,我无法阅读 sender entries数组的任何其他元素。 我希望获得costsender的值。

我该怎么做?

1 个答案:

答案 0 :(得分:1)

  1. 你的root包含2个元素“return”和“entries”so或 root["return"]root["entries"]

  2. 然后 - 数组包含一个成员列表 - 所以即使它只有一个条目 - 你仍然必须得到它。

  3. 如果引用了值 - 它是字符串 - 您不能在其上使用getInt。例如,getInt适用于“status”而不是“sender”

  4. 以下是整个样本

    #include <iostream>
    #include <string>
    #include <json/json.h>
    int main()
    {
    
        std::string s = R"({
            "return":
            {
            "status":200,
            "message":"Accepted"
            },
            "entries":
            [
            {
            "messageid":185002992,
            "message":"CplusItsGood",
            "status":1,
            "statustext":"test",
            "sender":"1234567",
            "receptor":"123456789",
            "date":1234,
            "cost":140
            }
            ]
        })";
    
    
        Json::Reader reader;
        Json::Value root;
    
        reader.parse(s, root, false);
    
        auto entriesArray = root["entries"];
    
        auto firstelem = entriesArray[0];
        std::string sender = firstelem["sender"].asString();
        int i = std::stoi(sender);
        std::cout << "array:" << entriesArray << "\n";
        std::cout << "element:" << firstelem << "\n";
        std::cout << "value:" << sender << "\n";
        std::cout << "parsed value:" << i << "\n";
    }
    

    输出

    array:[
            {
                    "cost" : 140,
                    "date" : 1234,
                    "message" : "CplusItsGood",
                    "messageid" : 185002992,
                    "receptor" : "123456789",
                    "sender" : "1234567",
                    "status" : 1,
                    "statustext" : "test"
            }
    ]
    element:{
            "cost" : 140,
            "date" : 1234,
            "message" : "CplusItsGood",
            "messageid" : 185002992,
            "receptor" : "123456789",
            "sender" : "1234567",
            "status" : 1,
            "statustext" : "test"
    }
    value:1234567
    parsed value:1234567