c++ JsonCpp 解析带有转义引号作为数组的字符串
c++ JsonCpp parse string with escaped quotes as array
我有以下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 字符串解析为字符串流后,我可以将购物车解析为 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 将购物车解析为数组?
解析
外部 JSON 的方式相同!
您从一个字符串(好吧,被流隐藏)开始,并将其转换为 JSON。
现在,JSON 包含一个字符串属性,并且本身包含 JSON。问题是递归的。内部字符串最初来自 JSON 的事实也可以忽略。只是假装它是你输入的字符串。
因此,您可以使用 JSON::Reader 依次从该字符串中获取 JSON。
像这样:
const std::string responseDataCartStr = responseData[0]["cart"].asString();
Json::Reader reader;
if (!reader.parse(responseDataCartStr, responseDataCart))
throw std::runtime_error("Parsing nested JSON failed");
JsonCpp 提供了几种解析 JSON 的方法,值得探索它们以找到最适合您的用例的方法。以上只是一个例子。
忽略反斜杠 — 转义在封装 JSON 文档中是有意义的,但最外层的解析阶段应该已经考虑到了这一点。如果将responseDataCartStr
打印到控制台,您将看到它本身就是一个有效的 JSON 文档。
相关文章:
- 使用 jsoncpp 解析 json 数组字符串
- C++ 对象数组字符串输入在控制台上不起作用
- 插入了 C++ 数组字符串数据,但在显示输出时不显示
- 无法区分 JSON 对象/数组/字符串
- 为什么数组(字符串类型)的大小是 24 字节,带有单个空格元素
- 如何使用数组字符串进行输入验证
- (C++) 打印字符数组字符串的单词时出现问题
- 使用Back_inserter从任何位置的输入字符中使用Back_inserter进行过滤数组字符串
- C 函数反转字符数组字符串
- 如何在 c++ 中创建数组(字符串 [] )的向量
- 如何返回数组字符串的指针
- char数组字符串混淆
- 如何从字符数组字符串中提取空格
- 是否可以将 Bitset<8> 的值复制到数组字符串而不转换它们?
- C++数组字符串函数
- 如何在函数中操作字符数组(字符串)的指针,该指针在C / C ++中作为参数传递
- visual将音频文件存储到数组/字符串流C++中
- c++在char数组(字符串)上将what替换为
- 将数组字符串转换为intger c++(初学者)
- 需要设置数组字符串长度,使其恰好为13