我正在用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;)对的地图。我该怎么办?
答案 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}}