将InputStream转换为JSON
我正在使用json-rpc-1.0.jar.Below是我的代码。 我需要将InputStream对象转换为JSON,因为响应是在JSON中。
我确实validation了从Zappos API获得的json响应。 这是有效的。
PrintWriter out = resp.getWriter(); String jsonString = null; URL url = new URL("http://api.zappos.com/Search?term=boots&key=my_key"); InputStream inputStream = url.openConnection().getInputStream(); resp.setContentType("application/json"); JSONSerializer jsonSerializer = new JSONSerializer(); try { jsonString = jsonSerializer.toJSON(inputStream); } catch (MarshallException e) { e.printStackTrace(); } out.print(jsonString);
我得到以下提到的例外:
com.metaparadigm.jsonrpc.MarshallException: can't marshall sun.net.www.protocol.http.HttpURLConnection$HttpInputStream at com.metaparadigm.jsonrpc.JSONSerializer.marshall(JSONSerializer.java:251) at com.metaparadigm.jsonrpc.JSONSerializer.toJSON(JSONSerializer.java:259) at Communicator.doGet(Communicator.java:33) at javax.servlet.http.HttpServlet.service(HttpServlet.java:740) at javax.servlet.http.HttpServlet.service(HttpServlet.java:853) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:247) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:193) at filters.ExampleFilter.doFilter(ExampleFilter.java:149)
利用Jackson JSON解析器。
推荐 – jackson之家
你唯一需要做的事 –
ObjectMapper mapper = new ObjectMapper(); Map jsonMap = mapper.readValue(inputStream, Map.class);
现在jsonMap
将包含JSON。
ObjectMapper.readTree(InputStream)很容易让你用JsonNodes获得嵌套的JSON。
public void testMakeCall() throws IOException { URL url = new URL("https://api.coindesk.com/v1/bpi/historical/close.json?start=2010-07-17&end=2018-07-03"); HttpURLConnection httpcon = (HttpURLConnection) url.openConnection(); httpcon.addRequestProperty("User-Agent", "Mozilla/4.0"); InputStream is = httpcon.getInputStream(); try { ObjectMapper mapper = new ObjectMapper(); JsonNode jsonMap = mapper.readTree(is); JsonNode bpi = jsonMap.get("bpi"); JsonNode day1 = bpi.get("2010-07-18"); System.out.println(bpi.toString()); System.out.println(day1.toString()); } finally { is.close(); } }
结果:
{ “2010-07-18”:0.0858, “2010-07-19”:0.0808,…}
0.0858