c++ JsonCpp将带有转义引号的字符串解析为数组

标签 c++ arrays jsoncpp

我有以下 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 字符串解析为字符串流后,我可以将 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 解析为数组?

最佳答案

与解析外部 JSON 的方式相同!

您从一个字符串开始(好吧,被流隐藏了)并将其转换为 JSON。

现在 JSON 包含一个字符串属性,它本身包含 JSON。问题是递归的。内部字符串最初来自 JSON 的事实也可以忽略。假设它是您输入的字符串。

所以,you can use 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 文档。

关于c++ JsonCpp将带有转义引号的字符串解析为数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54006333/

相关文章:

c++ - 用c++将信息写入空窗口

c++ - 具有方法的抽象类,其后定义了数据类型,它具有指向该类的指针。四处走动

c++ - 关联容器中的 end() 迭代器

c++ - 引用变量的内存地址

arrays - 查找最大编号的行如果使用逻辑或方法对每一行进行排序,则为 1 秒

mysql - 加载 CSV 值,然后在 mysql 数据库中搜索匹配项

java字符串分割成数组,如何将char im分割成同一个数组?

c++ - jsoncpp。通过匹配值查找数组中的对象

c++ - 使用 JSonCpp 调用纯虚函数

c++ - 在 xcode 上安装 C++ json 库