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

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

どんなアドバイスでも大歓迎です

于 2014-08-19T22:01:42.677 に答える