java – 使用JSON.org解析器从HttpClient请求解析JSON
发布时间:2020-12-14 23:21:56 所属栏目:Java 来源:网络整理
导读:我试图使用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.apac
我试图使用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但无法使其工作 解决方法
您可以使用
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的大小). (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |