GSON: Expected a string but was BEGIN_OBJECT?

前端 未结 3 448
迷失自我
迷失自我 2020-12-17 10:02

I\'m trying to use GSON to parse some very simple JSON. Here\'s my code:

    Gson gson = new Gson();

    InputStreamReader reader = new InputStreamReader(ge         


        
3条回答
  •  执念已碎
    2020-12-17 10:47

    The JSON structure is an object with one element named "access_token" -- it's not just a simple string. It could be deserialized to a matching Java data structure, such as a Map, as follows.

    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 map = new Gson().fromJson(jsonInput, new TypeToken>() {}.getType());
        String key = map.get("access_token");
        System.out.println(key);
      }
    }
    

    Another common approach is to use a more specific Java data structure that matches the JSON. For example:

    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;
    }
    

提交回复
热议问题