2016-10-01 11 views
0

私はCasablanca、cpprestsdkを使用してVisual Studio 2015 ProfessionalのC++でREST APIを使用しています。ここでは、APIを使用してJSONとしてレスポンスを解析する簡単な例を開発しようとしています。使用しているURLは、実際にAPIに送信されたすべてのパラメータを返します。私はCasablanca、C++のJSONから値を取得できません

私はAPIをヒットし、レスポンスも得て、応答から正常にjsonを抽出しました。しかし、私がjsonから任意のキーで値を読み取ろうとすると、クラッシュします。したがって、私はそのキーが利用可能かどうかをチェックし、常にjsonにはフィールドがないと言っています。一例として、データ、すなわちjsonを印刷した。キー/フィールド "name"を持っていますが、has_fieldでチェックするとfalseを返します。

助けてください。

完全なコードは以下の通りです:

json::value postData; 
postData[L"name"] = json::value::string(L"Joe Smith"); 
postData[L"sport"] = json::value::string(L"Baseball"); 

http_client client(L"https://httpbin.org/post); 

http_request request(methods::POST); 

request.set_body(postData); 

client.request(request).then([](web::http::http_response response) { 

    json::value j = response.extract_json().get(); 

    json::value data = j.at(U("data")); 

    std::wcout << "Json : " << data; 
    // Prints "{\"name\":\"Joe Smith\",\"sport\":\"Baseball\"}" 

    if (data.has_field(U("name"))) { 
    std::cout << "Name Found"; 
    } 
    else { 
    std::cout << "Name key not Found"; 
    } 

}); 

答えて

0

それはあなたの応答は次のようになりますようだ:

{ "data": "{\"name\":\"Joe Smith\",\"sport\":\"Baseball\"}" }` 

すなわち、実際のデータはJSONオブジェクトではなく、JSON文字列として渡されたエスケープ。私は、あなたがそれをやっているやり方をしたいと思うことをするためにこのようなペイロードを返す必要があると思います:

{ 
    "data": { 
     "name": "John Smith", 
     "sport": "Baseball" 
    } 
} 
関連する問題