2016-11-04 3 views
0

私は以下のjsonコードを持っています。Javaでネストされたマップを取得する

{ 
"main": { 
    "temp": 301.335, 
    "pressure": 951.08, 
    "humidity": 45, 
    "temp_min": 301.335, 
    "temp_max": 301.335, 
    "sea_level": 1025.43, 
    "grnd_level": 951.08 
    } 
} 

このデータを取得するには、次のJavaコードを使用しています。

これ以上のjsonは、文字列textに格納されています。

  System.out.println(text); 

     ObjectMapper mapper = new ObjectMapper(); 

     // read JSON from a file 
     Map<String, Object> map = mapper.readValue(text, new TypeReference<Map<String, Object>>() { 
     }); 

     System.out.println(map.get("main")); 

     Map<String, Object> mapIn = mapper.readValue(map.get("main").toString(), 
       new TypeReference<Map<String, Object>>() { 
       }); 

     System.out.println(mapIn); 

ここでは、tempという値を自分のコンソールに出力します。しかし今のところ、私は以下のo/pを例外で得る。

{ 
    "coord": { 
    "lon": 106.85, 
    "lat": -6.21 
    }, 
    "weather": [{ 
    "id": 802, 
    "main": "Clouds", 
    "description": "scattered clouds", 
    "icon": "03d" 
    }], 
    "base": "stations", 
    "main": { 
    "temp": 304.15, 
    "pressure": 1007, 
    "humidity": 62, 
    "temp_min": 304.15, 
    "temp_max": 304.15 
    }, 
    "visibility": 8000, 
    "wind": { 
    "speed": 3.1, 
    "deg": 320 
    }, 
    "clouds": { 
    "all": 40 
    }, 
    "dt": 1478244600, 
    "sys": { 
    "type": 1, 
    "id": 8043, 
    "message": 0.0084, 
    "country": "ID", 
    "sunrise": 1478211943, 
    "sunset": 1478256397 
    }, 
    "id": 1642911, 
    "name": "Jakarta", 
    "cod": 200 
} { 
    temp = 304.15, pressure = 1007, humidity = 62, temp_min = 304.15, temp_max = 304.15 
} 
Exception in thread "main" 
java.lang.ClassCastException: java.util.LinkedHashMap cannot be cast to java.lang.String 
at Jackson2Example.main(Jackson2Example.java: 51) 

私はこの問題を解決する方法を、私は私が間違っているつもりですどこ知っているとtemp値を取得してください。

おかげで

+0

なぜmapper.readValueをもう一度呼びますか?今回はString(Json Stringではありません)で呼び出しています。 –

+0

@SachinGupta、これは私が立ち往生しているところです...出力からその 'temp 'を得る方法がわからない – user3872094

答えて

1

あなたは再びmapper.readValueをコールする必要はありません。これを試してください:

Map<String, Object> map = mapper.readValue(text, new TypeReference<Map<String, Object>>() { 
    }); 


Map<String, Object> mainMap = (Map<String, Object>) map.get("main");   

System.out.println(mainMap.get("temp")); 
+0

Haa、今私はこれを得ました、これは入れ子にされたjsonから価値を得るでしょう。どうもありがとうございました... – user3872094

関連する問題