2016-10-01 2 views
0

Я использую Casablanca, cpprestsdk, чтобы использовать API REST на C++ в Visual Studio 2015 Professional. Я пытаюсь разработать простой пример, нажимая на API и анализируя ответ как JSON. Используемый мной URL-адрес фактически возвращает все параметры, отправленные в API.Невозможно получить значения от JSON в Касабланке, C++

Я ударил 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" 
    } 
} 

 Смежные вопросы

  • Нет связанных вопросов^_^