2012-07-20 12 views
15

मैं कुछ बहुत ही सरल JSON को पार्स करने के लिए जीएसओएन का उपयोग करने की कोशिश कर रहा हूं। यहाँ मेरी कोड है:जीएसओएन: एक स्ट्रिंग की उम्मीद है लेकिन BEGIN_OBJECT था?

Gson gson = new Gson(); 

    InputStreamReader reader = new InputStreamReader(getJsonData(url)); 
    String key = gson.fromJson(reader, String.class); 

यहाँ JSON यूआरएल से लौटे है:

E/AndroidRuntime(19447): com.google.gson.JsonSyntaxException:  java.lang.IllegalStateException: Expected a string but was BEGIN_OBJECT at line 1 column 2 

कोई भी विचार:

{ 
    "access_token": "abcdefgh" 
} 

मैं इस अपवाद हो रही है? मैं जीएसओएन के लिए नया हूँ।

उत्तर

23

JSON संरचना एक ऑब्जेक्ट है जिसका नाम "access_token" है - यह केवल एक साधारण स्ट्रिंग नहीं है। यह मिलान करने वाली जावा डेटा संरचना, जैसे मानचित्र के रूप में, को deserialized किया जा सकता है।

import java.util.Map; 

import com.google.gson.Gson; 
import com.google.gson.reflect.TypeToken; 

public class GsonFoo 
{ 
    public static void main(String[] args) 
    { 
    String jsonInput = "{\"access_token\": \"abcdefgh\"}"; 

    Map<String, String> map = new Gson().fromJson(jsonInput, new TypeToken<Map<String, String>>() {}.getType()); 
    String key = map.get("access_token"); 
    System.out.println(key); 
    } 
} 

एक और आम तरीका जेएसओएन से मेल खाने वाली एक और विशिष्ट जावा डेटा संरचना का उपयोग करना है। उदाहरण के लिए:

import com.google.gson.Gson; 
import com.google.gson.annotations.SerializedName; 

public class GsonFoo 
{ 
    public static void main(String[] args) 
    { 
    String jsonInput = "{\"access_token\": \"abcdefgh\"}"; 

    Response response = new Gson().fromJson(jsonInput, Response.class); 
    System.out.println(response.key); 
    } 
} 

class Response 
{ 
    @SerializedName("access_token") 
    String key; 
} 
+1

अच्छा जवाब ब्रूस! –

+0

मैं एक पुराने धागे को मारने के लिए सोरी हूं, जोसन के लिए नया है, क्या आप संक्षेप में अपना पहला जवाब समझा सकते हैं, मैं मानचित्र को टोकन में डालने के बारे में उलझन में हूं .. ** जेसन() ** विधि – SSH

4

एक और "कम स्तर" संभावना Gson JsonParser का उपयोग कर: आप एक कस्टम deserializer लिखेंगे

package stackoverflow.questions.q11571412; 

import com.google.gson.*; 

public class GsonFooWithParser 
{ 
    public static void main(String[] args) 
    { 
    String jsonInput = "{\"access_token\": \"abcdefgh\"}"; 

    JsonElement je = new JsonParser().parse(jsonInput); 

    String value = je.getAsJsonObject().get("access_token").getAsString(); 
    System.out.println(value); 
    } 
} 

तो एक दिन, JsonElement अपने सबसे अच्छे दोस्त हो जाएगा।

+1

टाई में दूसरे पैरामीटर के बारे में उलझन में है। मैं इस तरह की चीज कर रहा था और इस सटीक समाधान की आवश्यकता थी। – Shadoninja

+0

आपका स्वागत है – giampaolo

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