2017-04-21 10 views
0

私は在庫の値を扱うJavaでアプリケーションを書いています。私はGSONを使用して株式価値のリストを取得することができますが、その後JSONがソートされていないとして、私は本当に、特定の株式価値の日付を知らない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" 
    } 
    } 
} 

: 私はこのようになります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()); 

は(「オープン」)日付株式価値のペアを含む地図を作ることです。どうしたらいいですか?

答えて

0

まず、「欠落」1があります。インフォメーション ": ":{2017年4月18日は= {ボリューム= 1.47908E7、高い= 141.91、低= 140.61、近い= 140.96、オープン= 141.27デイリー価格" ,.解決策は

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-21 10:24:00 = {容積= 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}}

+1

あなたのソリューションは、どうもありがとう。 –

関連する問題