2011-04-26 25 views
18

तो मैं एक एपीआई से JSON पार्स करने के लिए जीएसओएन का उपयोग कर रहा हूं और डेटा में गतिशील फ़ील्ड को पार्स करने के तरीके के रूप में अटक गया हूं।जीएसओएन के साथ गतिशील JSON फ़ील्ड को कैसे पार्स करें?

यहाँ एक प्रश्न पर लौटे 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 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 लिखने की कोशिश कर सकते हैं।

अस्वीकरण: मुझे भी, जीएसओएन के साथ कोई अनुभव नहीं है, लेकिन जैक्सन जैसे अन्य ढांचे के साथ।

+1

इसे खींचा, यह बेकार ढंग से काम किया। बहुत बहुत धन्यवाद। : डी –

+0

क्या इसका विश्लेषण करने का कोई तरीका है लेकिन न्यूटन सॉफ्ट का उपयोग करना? –

संबंधित मुद्दे