2011-04-26 21 views
18

私はAPIからJSONを解析するためにGSONを使用しています。データの動的フィールドを解析する方法については固執しています。ここで動的JSONフィールドをGSONで解析する方法は?

がクエリに返されたJSONデータの例である:

{ 

- 
30655845: { 
    id: "30655845" 
    name: "testdata 
    description: "" 
    latitude: "38" 
    longitude: "-122" 
    altitude: "0" 
    thumbnailURL: http://someimage.com/url.jpg 
    distance: 9566.6344386665 
} 
- 
28688744: { 
    id: "28688744" 
    name: "testdata2" 
    description: "" 
    latitude: "38" 
    longitude: "-122" 
    altitude: "0" 
    thumbnailURL: http://someimage.com/url.jpg 
    distance: 9563.8328713012 
} 
} 

私は現在、単一の静的な値を処理しています方法は、クラスである:

import com.google.gson.annotations.SerializedName; 

public class Result 
{ 
@SerializedName("id") 
public int id; 

@SerializedName("name") 
public String name; 

@SerializedName("description") 
public String description; 

@SerializedName("latitude") 
public Double latitude; 

@SerializedName("longitude") 
public Double longitude; 

@SerializedName("altitude") 
public Double altitude; 

@SerializedName("thumbnailURL") 
public String thumbnailURL; 

@SerializedName("distance") 
public Double distance; 
} 

そして私がすることができます

Gson gson = new Gson(); 

Reader reader = new InputStreamReader(source); 

Result response= gson.fromJson(reader, Result.class); 

私はこのデータをサブデータに照会して取得することができます。単一のエントリと非常に簡単にそれを解析するが、配列の各値に対して与えられたランダムな整数値はどうでしょうか? (すなわち、30655845と2868874)

助けが必要ですか?

答えて

19

GSON documentationによると、あなたは次のようなことを行うことができます。

Type mapType = new TypeToken<Map<Integer, Result> >() {}.getType(); // define generic type 
Map<Integer, Result> result= gson.fromJson(new InputStreamReader(source), mapType); 

またはあなたのクラスのcustom serializerを書いてみることができます。

免責事項:私もGSonの経験はありませんが、Jacksonのような他のフレームワークはありません。

+1

これを打つと、これは完璧に機能しました。本当にありがとう。 :D –

+0

NewtonSoftを使って同じことを解析する方法はありますか? –

関連する問題