2016-10-01 4 views
0

Visual Studio 2015 Professional에서 C++의 REST API를 사용하기 위해 Casablanca, cpprestsdk를 사용하고 있습니다. 여기 API와 JSON으로 응답을 파싱하는 간단한 예제를 개발하려고합니다. 사용중인 URL은 실제로 API에 전송 된 모든 매개 변수를 반환합니다.Casablanca, C++의 JSON에서 값을 가져올 수 없습니다.

나는 API를 치고 응답을 얻었으므로 응답에서 json을 성공적으로 추출했다. 그러나 json에서 키의 값을 읽으려고 할 때 충돌이 발생합니다. 그러므로 나는 그 열쇠가 유효한지 아닌지를 확인하고, 항상 json이 필드를 가지고 있지 않다고 말한다. 예를 들어 데이터 즉 json을 인쇄했습니다. 그것은 키/필드 "이름"이 있지만 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" 
    } 
} 
관련 문제