如何解析来自 Unirest 调用的 JSON 结果

2022-09-01 11:39:04

我正在使用Unirest库从Mashape API中检索JSON。我使用以下代码进行调用:

HttpResponse<JsonNode> request = Unirest.get(URL)
  .header("X-Mashape-Authorization", MASHAPE_AUTH)
  .asJson();

这将以我不熟悉的形式返回我的JSON。HttpResponse<JsonNode>

从阅读有限的文档来看,似乎我必须调用响应对象才能取回JsonNode对象。但是,我仍然不知道如何处理JsonNode对象。getBody()

开始解析此数据的最佳方法是什么?

编辑:如果它有助于给出示例,我想解析的JSON看起来像这样:

{
  "success": "1",
  "error_number": "",
  "error_message": "",
  "results": [
    {
      "name": "name1",
      "formatedName": "Name 1"
    },
    {
      "name": "testtesttest",
      "formatedName": "Test Test Test"
    },
    {
      "name": "nametest2",
      "formatedName": "Name Test 2"
    },
    {
      "name": "nametest3",
      "formatedName": "Name Test 3"
    }
  ]
}

答案 1

今天试图为自己弄清楚这一点。源代码可能是您将获得的唯一文档。这是 tl;dr

// the request from your question
HttpResponse<JsonNode> request = Unirest.get(URL)
  .header("X-Mashape-Authorization", MASHAPE_AUTH)
  .asJson();

// retrieve the parsed JSONObject from the response
JSONObject myObj = request.getBody().getObject();

// extract fields from the object
String msg = myObj.getString("error_message");
JSONArray results = myObj.getJSONArray();

以下是对我所做的洞穴探险的更多解释:

HttpResponse 类中,我们可以看到它将返回实例变量 ,该变量在第 92 行被分配为:getBody()body

this.body = (T) new JsonNode(jsonString)

因此,我们需要查看 JsonNode 类。构造函数采用表示要分析的 JSON 的字符串,并尝试创建 或 .值得庆幸的是,这些物体的来源是有据可查的JSONObjectJSONArrayorg.json


答案 2

由于响应很容易作为字符串检索,因此,如果您不想手动遍历 JSON,则可以使用所需的任何 JSON 库进行反序列化。我个人偏爱Google的GSON及其轻松将您的JSON响应映射到您创建以匹配的对象的能力。

HttpRequest request = Unirest.get(/*your request URI*/)
                .headers(/*if needed*/)
                .queryString(/*if needed*/);

HttpResponse<JsonNode> jsonResponse = request.asJson();
Gson gson = new Gson();
String responseJSONString = jsonResponse.getBody().toString();
MyResponseObject myObject = gson.fromJson(responseJSONString, String.class);