在Java中,有没有办法通过索引从JSON对象中检索一条信息?我正在访问quandl上的财务数据表,并希望返回表中发布的最新抵押贷款利率。关键是以字符串形式过帐费率的日期。最新数据的密钥每周都会更改,但我想要的数据将始终是表中的第一个键值对。
我能在大约5分钟内在JavaScript中执行此操作。但在Java中似乎更麻烦。下面是我的代码的迭代,似乎最接近我想去的地方。我能够将表中设置的第一个键值对作为Java中的对象返回,这是... [“2017-12-14”,3.93]。最后一步是逃避我。我如何抓住3.93并返回?或者有更好的方法来解决这个问题吗?
double baseRate = 0.0;
default double getBaseRate() throws MalformedURLException {
try {
// make a GET request
URL url = new URL("https://www.quandl.com/api/v3/datasets/FMAC/30US.json?api_key=-c-s9zf8s1NdLbhVin1p");
HttpURLConnection request = (HttpURLConnection) url.openConnection();
request.connect();
InputStreamReader is = new InputStreamReader((InputStream) request.getContent());
// Convert response stream to a JSON object
JsonReader reader = Json.createReader(is);
JsonObject obj = reader.readObject();
reader.close();
request.disconnect();
// Drill down to the desired piece of data
JsonObject dataset = obj.getJsonObject("dataset");
JsonArray data = dataset.getJsonArray("data");
Object currentData = data.get(0);
System.out.println(currentData);
} catch (IOException e) {
e.printStackTrace();
}
return baseRate;
}
答案 0 :(得分:0)
我认为您需要进入另一级别的数组才能访问所需的值。
JsonArray data = dataset.getJsonArray("data");
JsonArray firstPieceOfData = data.get(0);
Object firstRate = firstPieceOfData.get(1);
答案 1 :(得分:0)
如果您使用Jackson阅读JSON,您可以使用.at()方法,该方法允许您通过JSON指针表达式访问节点的值,在您的情况下{J}指针表达式String jsonString = "{\"dataset\":{\"id\":4644596,\"dataset_code\":\"30US\",\"database_code\":\"FMAC\",\"name\":\"30-Year Fixed Rate Mortgage Average in the United States\",\"description\":\"Units: Percent\\u003cbr\\u003e\\u003cbr\\u003eNot Seasonally Adjusted\",\"refreshed_at\":\"2017-12-18T04:09:32.892Z\",\"newest_available_date\":\"2017-12-14\",\"oldest_available_date\":\"1971-04-02\",\"column_names\":[\"Date\",\"Value\"],\"frequency\":\"weekly\",\"type\":\"Time Series\",\"premium\":false,\"limit\":null,\"transform\":null,\"column_index\":null,\"start_date\":\"1971-04-02\",\"end_date\":\"2017-12-14\",\"data\":[[\"2017-12-14\",3.93],[\"2017-12-07\",3.94],[\"2017-11-30\",3.9]],\"collapse\":null,\"order\":null,\"database_id\":582}}";
ObjectMapper mapper = new ObjectMapper();
JsonNode jsonNodes = mapper.createObjectNode();
try {
jsonNodes = mapper.readTree(jsonString);
} catch (IOException e) {
//e.printStackTrace();
}
System.out.println(jsonNodes.at("/dataset/data/0/1").asDouble());// 3.93
< / p>
我为此演示目的截断了你的json:
{{1}}