2016-10-01 78 views
0

我在Visual Studio 2015 Professional中使用Casablanca,cpprestsdk在C++中使用REST API。我正在嘗試開發一個簡單的示例,這裏命中一個API並將響應解析爲JSON。我使用的URL實際上會返回發送給API的所有參數。無法從卡薩布蘭卡,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" 
    } 
} 
相關問題