【问题标题】:Not able to get values from JSON in Casablanca, C++无法从卡萨布兰卡 C++ 中的 JSON 获取值
【发布时间】:2023-03-21 18:57:01
【问题描述】:

我在 Visual Studio 2015 Professional 中使用 Casablanca、cpprestsdk 在 C++ 中使用 REST API。我正在尝试在这里开发一个简单的示例,点击 API 并将响应解析为 JSON。我使用的 URL,实际上返回了所有发送到 API 的参数。

我已经点击了 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";
  }

 });

【问题讨论】:

    标签: c++ json visual-studio visual-c++ casablanca


    【解决方案1】:

    您的回复似乎是这样的:

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

    即实际数据不是 JSon 对象,而是作为字符串传递的转义 JSon。我想您需要返回一个看起来像这样的有效负载才能按照您的方式做您想做的事情:

    {
        "data": {
            "name": "John Smith", 
            "sport": "Baseball"
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-06-02
      • 2016-11-27
      • 2017-04-06
      • 2014-06-11
      • 1970-01-01
      • 2018-11-14
      • 1970-01-01
      • 2017-05-08
      相关资源
      最近更新 更多