java – 使用JSON.org解析器从HttpClient请求解析JSON

前端之家收集整理的这篇文章主要介绍了java – 使用JSON.org解析器从HttpClient请求解析JSON前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我试图使用Notes代理解析 JSON,使用Apache HttpClient获取JSON.

这是返回JSON的代码

import lotus.domino.*;
import org.apache.http.HttpResponse;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.HttpClientBuilder;

      Session session = getSession();
      AgentContext agentContext = session.getAgentContext();

      HttpClient client = HttpClientBuilder.create().build();
      HttpGet request = new HttpGet("http://api.acme.com/customer");
      request.addHeader("accept","application/json");
      request.addHeader("Host","api.acme.com");
      request.addHeader("X-Api-Version","1.0");
      request.addHeader("Authorization","Basic ...");

      HttpResponse response = client.execute(request);

JSON看起来像这样.

[ 
  { 
    "id": 123456,"insertDate": "2014-05-12T16:51:38.343","read": false,"site": "acme.com","Email": "john.doe@acme.com","location": "/customer/1212?v=1.0" 
  } 
]

我曾尝试使用JSON.org中的JSONObject和JSONArray但无法使其工作
我需要一些来自json.org包的示例代码或其他解析json的方法.

解决方法

您可以使用 HttpResponse#getEntity从HttpResponse中的Entity获取JSON.一旦有了,就可以创建一个新的JSONArray并迭代该数组以访问JSON对象中的值:
String json = IoUtils.toString(response.getEntity().getContent());
JSONArray array = new JSONArray(json);
for (int i = 0; i < array.length(); i++) {
    JSONObject object = array.getJSONObject(i);
    log.info("the id is {}",object.getInt("id"));
    log.info("the insertDate is {}",object.getString("insertDate"));
    log.info("read is {}",object.getBoolean("read"));
    log.info("the site is {}",object.getString("site"));
    log.info("the Email is {}",object.getString("Email"));
    log.info("the location is {}",object.getString("location"));
}

我在http://jsonblob.com/537a43bfe4b047fa2ef5f15d将JSON保存在JSONBlob中并创建了一个请求JSON的单元测试:

import lombok.extern.slf4j.Slf4j;
import org.apache.commons.io.IoUtils;
import org.apache.http.HttpResponse;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.HttpClientBuilder;
import org.json.JSONArray;
import org.json.JSONObject;
import org.junit.Test;

@Slf4j
public class JsonTest {
    @Test
    public void test() throws Exception {
        HttpClient client = HttpClientBuilder.create().build();
        HttpGet request = new HttpGet("http://jsonblob.com/api/jsonBlob/537a43bfe4b047fa2ef5f15d");
        request.addHeader("accept","application/json");
        HttpResponse response = client.execute(request);
        String json = IoUtils.toString(response.getEntity().getContent());
        JSONArray array = new JSONArray(json);
        for (int i = 0; i < array.length(); i++) {
            JSONObject object = array.getJSONObject(i);
            log.info("the id is {}",object.getInt("id"));
            log.info("the insertDate is {}",object.getString("insertDate"));
            log.info("read is {}",object.getBoolean("read"));
            log.info("the site is {}",object.getString("site"));
            log.info("the Email is {}",object.getString("Email"));
            log.info("the location is {}",object.getString("location"));
        }
    }
}

运行它的输出是:

11:23:19.508 [main] INFO  JsonTest - the id is 123456
11:23:19.516 [main] INFO  JsonTest - the insertDate is 2014-05-12T16:51:38.343
11:23:19.516 [main] INFO  JsonTest - read is false
11:23:19.516 [main] INFO  JsonTest - the site is acme.com
11:23:19.516 [main] INFO  JsonTest - the Email is john.doe@acme.com
11:23:19.516 [main] INFO  JsonTest - the location is /customer/1212?v=1.0

我使用IOUtils类来转换来自HttpResponse实体的InputStream,但是无论如何你都可以这样做(并且像我那样转换它可能不是最好的想法,具体取决于JSON的大小).

猜你在找的Java相关文章