【发布时间】:2019-01-02 12:23:41
【问题描述】:
我有以下 json 字符串:
{
"data" :
[
{
"cart" : "[{\"name\":\"Test item 1\",\"price\":15,\"quantity\":1,\"sum\":15,\"tax\":\"none\",\"payment_type\":\"advance\",\"item_type\":\"service\"},{\"name\":\"Test item 2\",\"price\":13.01,\"quantity\":2,\"sum\":26.02,\"tax\":\"none\",\"payment_type\":\"part_prepay\",\"item_type\":\"work\"}]",
"contact" : "noname@google.com",
"p_id" : "603",
"sum" : "100.02",
"tax_system" : "osn"
}
],
"msg" : null,
"result" : "success"
}
将输入json字符串解析为stringstream后,我可以将cart解析为std::string:
const std::string ParseJsonData(std::stringstream ssJsonStream)
{
Json::Value jsonData;
Json::Value responseData;
Json::Value responseDataCart;
Json::CharReaderBuilder jsonReader;
std::string errs;
if (Json::parseFromStream(jsonReader, ssJsonStream, &jsonData, &errs)) {
responseData = jsonData["data"];
responseDataCart = responseData[0]["cart"];
return responseDataCart.toStyledString().c_str();
}
else
return "Could not parse HTTP data as JSON";
}
请告诉我,如何使用 JsonCpp 将 cart 解析为数组?
【问题讨论】:
-
你试过
responseDataCart = responseData[0]["cart"]["name"]; -
是的,我试过了 - 它不起作用。
-
你的退货单很浪费。
toStyledString()已经给了你一个std::string,只需要直接返回(它会移动它);您从中获取一个 C 字符串,然后从 that 构造一个新字符串。这不是世界末日,但它确实需要strlen调用并禁止移动数据。