在 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 的任何其他元素=]数组。
例如,我想获取 cost
或 sender
的值。
我该怎么做?
您的根包含 2 个元素 "return" 和 "entries" 左右
root["return"]
或 root["entries"]
然后 - 数组包含一个成员列表 - 所以即使它只有一个条目 - 你仍然必须得到它。
如果值被引用——它是字符串——你不能在它上面使用 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];
我尝试为我的程序编写一个简单的 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 的任何其他元素=]数组。
例如,我想获取 cost
或 sender
的值。
我该怎么做?
您的根包含 2 个元素 "return" 和 "entries" 左右
root["return"]
或root["entries"]
然后 - 数组包含一个成员列表 - 所以即使它只有一个条目 - 你仍然必须得到它。
如果值被引用——它是字符串——你不能在它上面使用 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];