使用Rapidjson解析POCO POST响应到JSON

Parsing POCO POST response to JSON using Rapidjson

本文关键字:响应 JSON POST POCO Rapidjson 解析 使用      更新时间:2023-10-16

我被这些反冲弄得筋疲力尽…

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

同样的问题…

有谁知道是什么问题吗?

JSON无法被rapidjson解析的原因是由于所有多余的反撇号和第一和最后双引号"。因此,我将它们删除如下:

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

欢迎提出建议