【问题标题】:GSON deserialize as array although JSON source is object尽管 JSON 源是对象,但 GSON 反序列化为数组
【发布时间】:2012-01-19 20:04:05
【问题描述】:

我想使用 GSON 将其反序列化为 Post 列表,但不知道如何告诉 GSON 如何忽略根元素“posts”(作为其对象)并仅处理数组。

我有:

Type postTypeList = new TypeToken<List<Post>>(){}.getType();

JsonParser jsonParser = new JsonParser();
JsonElement jsonElement = jsonParser.parse(myJSONString);
JsonObject postsRootObj = jsonElement.getAsJsonObject();

List<Post> postList = gson.fromJson(postsRootObj.get("posts"), postTypeList);

但是.. 我宁愿没有整个 JsonParser,我宁愿直接将它传递给 gson.fromJson 函数.. 有没有办法做到这一点?

{ "posts":
  [      

        {
       "username": "John",  
       "message": "I'm back",
       "time": "2010-5-6 7:00:34"
        "validator":[{
                        "prog": "Name1",
                        "name": "Name2",
                        "computername": "Name3",
                        "date": "2010-11-20 19:39:55"
                      }]
        }
      ,

        {
          "username": "Smith",
          "message": "I've been waiting",
          "time": "2010-4-6 10:30:26"
           "validator":[{
                        "prog": "Name1",
                        "name": "Name2",
                        "computername": "Name3",
                        "date": "2010-11-20 19:39:55"
                      }]

       }
]}

【问题讨论】:

    标签: json deserialization gson


    【解决方案1】:

    创建一个以List&lt;Post&gt; 作为其成员的包装类

    public class PostList{
    private List<Post> posts;
    // getter and setters for posts
    }
    

    然后以类似的方式使用fromJson

    List<Post> postList = gson.fromJson(myJSONString,PostList.class);
    

    【讨论】:

    • 这是我想到的另一种方法,但在我看来,这是一个不必要的课程,我只是希望 GSON 中内置了一些东西来帮助解决我的问题。
    • 哦,好吧!嗯..我只能想到这个和你写的方法..如果我错了,请纠正我,但我认为没有任何方法可以强制Gson完全忽略根元素..跨度>
    【解决方案2】:

    上面有一个更正。用法应该是:

     PostList postList = gson.fromJson(myJSONString,PostList.class);
     Post post = postlist.get(index) //index is the index of list you want to access
    

    【讨论】:

      猜你喜欢
      • 2017-07-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多