0

我正因与这种强烈反应而感到倦怠……

我在 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\"}]}

同样的问题...

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

4

1 回答 1

0

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"}]}

欢迎任何建议

于 2014-08-19T22:01:42.677 回答