首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用GSON将Json解析为JAVA对象,其中Json元素可能会发生变化

使用GSON将Json解析为JAVA对象,其中Json元素可能会发生变化
EN

Stack Overflow用户
提问于 2017-07-07 09:57:40
回答 4查看 3.9K关注 0票数 3

我正在尝试使用GSON将一个JSON .txt文件解析为一个。JSON文件具有以下结构:

代码语言:javascript
复制
    {
        "event0" : {
        "a" : "abc",
        "b" : "def"
        },

        "event1" : {
        "a" : "ghi",
        "b" : "jkl",
        "c" : "mno"
        }
    }

我已经将文本文件读入一个名为dataStr的字符串中。我想使用fromJson方法将事件捕获到下面的JAVA类中:

代码语言:javascript
复制
public class Event {
    private String a;
    private String b;
    private String c;

    public Event() {}

}

问题是JSON可能在某些元素中有一个额外的字段"c“。我希望将所有事件解析为事件类对象,对于没有"c“字段的情况,我希望使其在对象中为空或为零。事先不知道哪些元素会有"c“字段。

具体来说,我无法理解如何处理一些JSON元素中的一个额外字段。我要做的事情是:

代码语言:javascript
复制
Gson gson = new Gson();
ArrayList<Event> events = gson.fromJson(dataStr, Event.class);

但是,首先,我一直在讨论如何迭代Json文件中的事件,其次,如何将一些偶尔丢失的字段处理到同一个事件对象中。我真的很感激你朝正确的方向踢。谢谢你们所有人。

我对JSON解析相当陌生,可能忽略了以下答案中的一些内容:

Using Gson to convert Json into Java Object

Mapping JSON into POJO using Gson

Using gson to parse json to java object

Parse JSON into a java object

How to parse a json file into a java POJO class using GSON

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2017-07-07 10:37:35

我不确定我是否正确理解了你的问题。根据我的理解,您正在尝试使用java类中不可用的额外字段来转换json对象。坦白地说,我不明白你为什么要那样做,或者从一开始是否有可能。您可以通过将json转换为Map来解决这个问题。

Map = gson.fromJson(jsonString,Map.class);

票数 3
EN

Stack Overflow用户

发布于 2017-07-07 10:05:55

葛森自动为你做这件事。

因此,如果您有一个包含3个字段("a“、"b”和"c")的类"Alpha“,并且尝试处理一个json对象,该对象的名称与Alpha的"a”和"b“匹配,则Gson将使用json文件的值填充"a”和"b","c“将自动设置为空。

所以,在你的例子中,如果你写这个:

代码语言:javascript
复制
ArrayList<Event> events = gson.fromJson(dataStr, Event.class);

在您的json中,有只有2个字段的事件(与任何事件的类字段匹配)和所有字段设置的事件,您将得到一个没有错误的事件列表。也许您会得到一些字段为null,但代码将工作。

我希望能有所帮助!如果你想要的话,请提供更多的信息!

编辑

请注意,您的json文件必须不是.txt,而是.json!

票数 0
EN

Stack Overflow用户

发布于 2017-07-07 11:04:14

首先,我认为您的JSON应该如下所示:

代码语言:javascript
复制
{
  "events": [
    {
      "name": "event0",
      "a": "abc",
      "b": "def"
    },
    {
      "name": "event1",
      "a": "abc",
      "b": "def",
      "c": "mno"
    }
  ]
}

对于您的模型,这需要两个类:

代码语言:javascript
复制
public List<Event> events = null;

public class Event {
public String name;
public String a;
public String b;
public String c;

}

然后用GSON

代码语言:javascript
复制
Events events = gson.fromJson(jsonData, Events.class);

此外,我建议始终为JSON使用一个在线验证器,这样在对JSON进行编码之前,您就可以确定您的JSON结构是正确的。https://jsonlint.com/或用于格式化JSON:http://jsonprettyprint.com/

此外,这个网站可以通过JSON或使用示例文件为您创建Java类。http://www.jsonschema2pojo.org/

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44967922

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档