通过索引在Java中查询JSON对象

时间:2017-12-18 17:01:05

标签: java json

在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;            
}

2 个答案:

答案 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}}