I am using json-rpc-1.0.jar.Below is my code. I need to convert InputStream object into JSON since the response is in JSON.
I did verify the json response obtained f
Make use of Jackson JSON parser.
Refer - Jackson Home
The only thing you need to do -
ObjectMapper mapper = new ObjectMapper();
Map<String, Object> jsonMap = mapper.readValue(inputStream, Map.class);
Now jsonMap
will contain the JSON.
Better to save memory by having output as Stream<JsonNode>
private fun InputStream.toJsonNodeStream(): Stream<JsonNode> {
return StreamSupport.stream(
Spliterators.spliteratorUnknownSize(this.toJsonNodeIterator(), Spliterator.ORDERED),
false
)
}
private fun InputStream.toJsonNodeIterator(): Iterator<JsonNode> {
val jsonParser = objectMapper.factory.createParser(this)
return object: Iterator<JsonNode> {
override fun hasNext(): Boolean {
var token = jsonParser.nextToken()
while (token != null) {
if (token == JsonToken.START_OBJECT) {
return true
}
token = jsonParser.nextToken()
}
return false
}
override fun next(): JsonNode {
return jsonParser.readValueAsTree()
}
}
}
ObjectMapper.readTree(InputStream) easily let's you get nested JSON with JsonNodes.
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();
}
}
Result:
{"2010-07-18":0.0858,"2010-07-19":0.0808,...}
0.0858