我正在尝试使用GSON将一个JSON .txt文件解析为一个。JSON文件具有以下结构:
{
"event0" : {
"a" : "abc",
"b" : "def"
},
"event1" : {
"a" : "ghi",
"b" : "jkl",
"c" : "mno"
}
}我已经将文本文件读入一个名为dataStr的字符串中。我想使用fromJson方法将事件捕获到下面的JAVA类中:
public class Event {
private String a;
private String b;
private String c;
public Event() {}
}问题是JSON可能在某些元素中有一个额外的字段"c“。我希望将所有事件解析为事件类对象,对于没有"c“字段的情况,我希望使其在对象中为空或为零。事先不知道哪些元素会有"c“字段。
具体来说,我无法理解如何处理一些JSON元素中的一个额外字段。我要做的事情是:
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
发布于 2017-07-07 10:37:35
我不确定我是否正确理解了你的问题。根据我的理解,您正在尝试使用java类中不可用的额外字段来转换json对象。坦白地说,我不明白你为什么要那样做,或者从一开始是否有可能。您可以通过将json转换为Map来解决这个问题。
Map = gson.fromJson(jsonString,Map.class);
发布于 2017-07-07 10:05:55
葛森自动为你做这件事。
因此,如果您有一个包含3个字段("a“、"b”和"c")的类"Alpha“,并且尝试处理一个json对象,该对象的名称与Alpha的"a”和"b“匹配,则Gson将使用json文件的值填充"a”和"b","c“将自动设置为空。
所以,在你的例子中,如果你写这个:
ArrayList<Event> events = gson.fromJson(dataStr, Event.class);在您的json中,有只有2个字段的事件(与任何事件的类字段匹配)和所有字段设置的事件,您将得到一个没有错误的事件列表。也许您会得到一些字段为null,但代码将工作。
我希望能有所帮助!如果你想要的话,请提供更多的信息!
编辑
请注意,您的json文件必须不是.txt,而是.json!
发布于 2017-07-07 11:04:14
首先,我认为您的JSON应该如下所示:
{
"events": [
{
"name": "event0",
"a": "abc",
"b": "def"
},
{
"name": "event1",
"a": "abc",
"b": "def",
"c": "mno"
}
]
}对于您的模型,这需要两个类:
public List<Event> events = null;
public class Event {
public String name;
public String a;
public String b;
public String c;
}然后用GSON
Events events = gson.fromJson(jsonData, Events.class);此外,我建议始终为JSON使用一个在线验证器,这样在对JSON进行编码之前,您就可以确定您的JSON结构是正确的。https://jsonlint.com/或用于格式化JSON:http://jsonprettyprint.com/
此外,这个网站可以通过JSON或使用示例文件为您创建Java类。http://www.jsonschema2pojo.org/
https://stackoverflow.com/questions/44967922
复制相似问题