在 JsonCpp 中读取 json 的数组

Reading Array of the json in JsonCpp

我尝试为我的程序编写一个简单的 JSON reader 然后我使用 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 或 [=14 的任何其他元素=]数组。 例如,我想获取 costsender 的值。

我该怎么做?

  1. 您的根包含 2 个元素 "return" 和 "entries" 左右 root["return"]root["entries"]

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

  3. 如果值被引用——它是字符串——你不能在它上面使用 getInt。例如 getInt 适用于 "status" 而不是 "sender"

这是整个样本

#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

对于只有 1 个对象的数组,使用 0。

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