【问题标题】:Parsing POCO POST response to JSON using Rapidjson使用 Rapidjson 解析对 JSON 的 POCO POST 响应
【发布时间】:2014-08-19 21:13:31
【问题描述】:

由于这种强烈反对,我感到精疲力尽......

我在 C++ 中发出了一个 POST 请求并收到以下字符串:

"{\"results\": [{\"sku\": \"peds-std-us\", \"url\": \"https://d2y247jlvj8usn.cloudfront.net/1/2014.06.12/upload test.xlsx\", \"version\": \"2014.06.12\"}]}"

然后我像处理rapidjson 文档一样处理它,但我得到解析错误。

Document document;
if(document.Parse(results.c_str()).HasParseError()){
    return 1;
}

我尝试删除开头和结尾""

喜欢这个

{\"results\": [{\"sku\": \"peds-std-us\", \"url\": \"https://d2y247jlvj8usn.cloudfront.net/1/2014.06.12/upload test.xlsx\", \"version\": \"2014.06.12\"}]}

同样的问题...

有谁知道可能是什么问题?

【问题讨论】:

  • 如果去掉\ 字符会发生什么?那么它有解析错误吗?还要测试开始和结束" 字符。
  • 谢谢,这就是我目前正在尝试的...但是使用 str.replace 让我崩溃了
  • str.replace 不会导致崩溃。
  • 问题在于这根本不是 JSON。我猜有人添加了引号(或者实际上是 C++ 字符串文字?),以防止其他一些软件将中间双引号解释为字符串的分隔符。无论如何,我认为您应该将问题拆分为找出如何检索正确的 JSON 和找出如何解析 JSON。
  • 这是一个 c++ 字符串文字,如果你删除 \ 和第一个和最后一个 " 你会得到有效的 JSON。但它杀了我。

标签: c++ json poco-libraries rapidjson


【解决方案1】:

rapidjson 解析 JSON 失败的原因是所有多余的反斜杠\ 和第一个和最后一个双引号"。因此,我将它们删除如下。

if (*resultsCopy.begin() == '"')
    if (*(resultsCopy.rbegin()) == '"')
        resultsCopy = resultsCopy.substr(1, resultsCopy.length() - 2);
    else
        resultsCopy = resultsCopy.substr(1, resultsCopy.length() - 1);
else if (*(resultsCopy.rbegin()) == '"')
    resultsCopy = resultsCopy.substr(0, resultsCopy.length() - 1);

char chars[] = "\\";
for (unsigned int i = 0; i < strlen(chars); ++i){
    resultsCopy.erase (std::remove(resultsCopy.begin(), resultsCopy.end(), chars[i]), resultsCopy.end());
}

这些东西会删除开头和结尾的每个\"。 现在它是一个有效的 JSON

感谢@Mooing Duck

这是干净的 JSON

{"results": [{"sku": "peds-std-us", "url": "https://d2y247jlvj8usn.cloudfront.net/1/2014.06.12/upload test.xlsx", "version": "2014.06.12"}]}

欢迎任何建议

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多