使用JSON创建地图

时间:2017-04-21 14:57:36

标签: java json

我正在用Java编写一个处理股票价值的应用程序。 我有一个JSON文件,如下所示:

{
"Meta Data": 
{
    "1. Information": "Daily Prices ,
    "2. Symbol": "FB",
    "3. Last Refreshed": "2017-04-21 10:24:00",
    "4. Output Size": "Compact",
    "5. Time Zone": "US/Eastern"
},
"Time Series (Daily)": {
    "2017-04-21 10:24:00": {
        "1. open": "143.9000",
        "2. high": "144.1700",
        "3. low": "143.4600",
        "4. close": "143.7800",
        "5. volume": "2784942"
    },
    "2017-04-20": {
        "1. open": "142.9500",
        "2. high": "144.2500",
        "3. low": "142.6900",
        "4. close": "143.8000",
        "5. volume": "15917800"
    },
    "2017-04-19": {
        "1. open": "141.3500",
        "2. high": "143.0400",
        "3. low": "141.2700",
        "4. close": "142.2700",
        "5. volume": "15500400"
    },
    "2017-04-18": {
        "1. open": "141.2700",
        "2. high": "141.9100",
        "3. low": "140.6100",
        "4. close": "140.9600",
        "5. volume": "14790800"
    }
  }
}

我可以使用GSON获取股票价值清单,但由于JSON未分类,我真的不知道特定股票价值的日期。

final Gson gson = new Gson();
    final List<String> stockValues = gson.fromJson(JSON2, JsonElement.class)
            .getAsJsonObject()
            .get("Time Series (Daily)") // get the divisions property
            .getAsJsonObject()
            .entrySet() // and traverse its key/value pairs
            .stream()
            .map(Entry::getValue) // discarding the keys
            .map(JsonElement::getAsJsonObject)
            .map(jo -> jo.get("1. open")) // take the id property from the every `division` object
            .map(JsonElement::getAsJsonPrimitive)
            .map(JsonPrimitive::getAsString)
            .collect(Collectors.toList());

我真正需要的是制作包含日期股票价值(&#34;打开&#34;)对的地图。我该怎么办?

1 个答案:

答案 0 :(得分:0)

首先,有一个“失踪后”1。信息“:”每日价格“,解决方案是

    Map<String, Map<String, Double>> map = new HashMap<>();

    ObjectMapper mapper = new ObjectMapper();
    JsonNode node = mapper.readTree(new File("path_to_json_file"));
    JsonNode data = node.get("Time Series (Daily)");

    Iterator<String> iterator = data.fieldNames();
    while (iterator.hasNext()) {
        String date = iterator.next();
        JsonNode value = data.get(date);

        Map<String, Double> priceMap = new HashMap<>();
        Iterator<String> itr = value.fieldNames();
        while(itr.hasNext()){
            String param = itr.next();
            JsonNode price = value.get(param);

            priceMap.put(param.replaceAll(" ", "").split("\\.")[1], price.asDouble());
        }
        map.put(date, priceMap);
    }
    System.out.println(map);
}

输出:{2017-04-18 = {volume = 1.47908E7,high = 141.91,low = 140.61,close = 140.96,open = 141.27},2017-04-21 10:24:00 = {volume = 2784942.0,高= 144.17,低= 143.46,收盘= 143.78,开盘= 143.9},2017-04-20 = {体积= 1.59178E7,高= 144.25,低= 142.69,收盘= 143.8,开盘= 142.95},2017- 04-19 = {体积= 1.55004E7,高= 143.04,低= 141.27,关闭= 142.27,开放= 141.35}}