我正在尝试使用GSON将JSON .txt文件解析为JAVA对象。 JSON文件具有以下结构:
{
"event0" : {
"a" : "abc",
"b" : "def"
},
"event1" : {
"a" : "ghi",
"b" : "jkl",
"c" : "mno"
}
}
我已将文本文件读入名为dataStr的String中。我想使用fromJson方法将事件捕获到以下JAVA类中:
public class Event {
private String a;
private String b;
private String c;
public Event() {}
}
问题是JSON在某些元素中可能有一个额外的字段“c”。我想将所有事件解析为Event类对象,对于没有“c”字段的情况,我想在我的对象中使其为null或零。事先不知道哪个元素具有“c”字段。
具体来说,我无法弄清楚如何在一些JSON元素中处理一个额外的字段。我想按照以下方式做点什么:
Gson gson = new Gson();
ArrayList<Event> events = gson.fromJson(dataStr, Event.class);
但我首先陷入困境,如何迭代Json文件中的事件,其次,如何处理一些偶然缺失的字段到同一个Event对象中。我真的很感激正确的方向踢。谢谢大家。
我对JSON解析相当新,可能在以下答案中遗漏了一些内容:
Using Gson to convert Json into Java Object
Mapping JSON into POJO using Gson
答案 0 :(得分:3)
我不确定我是否理解你的问题。根据我的理解,您正在尝试使用java类中不可用的额外字段转换json对象。坦率地说,我不明白你为什么要这样,或者是否有可能开始。您可以通过将json转换为Map来实现解决方法。
Map map = gson.fromJson(jsonString,Map.class);
答案 1 :(得分:0)
Gson会自动为你做这件事。
所以,如果你有一个班级&#34; Alpha&#34;有3个字段(&#34; a&#34;,&#34; b&#34;和&#34; c&#34;)并尝试处理一个json对象,该对象有2个字段,其名称与Alpha&匹配#39; s&#34; a&#34;和&#34; b&#34;,Gson将填补&#34; a&#34;和&#34; b&#34;使用json文件的值和&#34; c&#34;将自动设置为null。
所以,在你的情况下,如果你这样写:
ArrayList<Event> events = gson.fromJson(dataStr, Event.class);
在你的json中,只有2个字段的事件(与任何事件的类字段相匹配)和所有字段设置的事件,你将得到一个没有错误的事件列表。也许你会得到一些空字段,但代码可以工作。
我希望能提供帮助!如果您愿意,可以询问更多信息!
修改强>
请注意,您的json文件不能是.txt而是.json!
答案 2 :(得分:0)
首先,我相信你的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结构在编码之前是正确的。 https://jsonlint.com/ 或者为了形成JSON: http://jsonprettyprint.com/
此网站也可以通过JSON Schema或使用示例文件为您创建Java类。 http://www.jsonschema2pojo.org/
答案 3 :(得分:0)