好的我有一个JSON文件,它有一组我想要解组成对象数组的对象。
JSON文件的布局示例如下:
{
"data":{
"name":{
"fName":"John",
"lName":"Doe"
},
"name":{
"fName":"James",
"lName":"Dokes"
}
}
}
完整的JSON文件比这复杂得多,这只是它如何布局的一个例子。
我想要做的是获取这些名称,并将它们解组为一个名称对象数组,这样我就可以随时访问每个名称对象。
这些类设置为
测试类
private Data data;
public void setData(Data d) {
data = d;
}
public Data getData() {
return data;
}
public String toString() {
return "" + data;
}
数据类
private Name name;
public void setName(Name n){
name = n;
}
public Name getName(){
return name;
}
public String toString(){
return "Names " + name;
}
然后Name类只是
public class Name {
private String fName;
private String lName;
//Getter setters here
public String toString(){
return "\nFirstName: " + fName + "\nLastName: " + lName;
}
然后在主课堂上,我只是做
ObjectMapper mapper = new ObjectMapper();
Test test = mapper.readValue(new File("C:\\JSON\\test.json"),
Test.class);
System.out.println(test);
现在这将打印出来
Names
FirstName: James
LastName: Dokes
但它忽略了名字对象,即John Doe。我想要的是获取每个这些名称对象并将它们放在一个ArrayList中,这样我就可以访问这些信息,并随时显示它。
我在这里做错了什么?我尝试更改JSON文件并将名称转换为数组,然后更改Data类中的代码并使Names成为对象名称数组,但是出现错误
Can not deserialize instance of Data out of START_ARRAY token
有没有人能够在这里指出我正确的方向,因为尝试了许多不同的解决方案,但没有成功。
提前感谢您提供任何帮助
编辑:
我的JSON应该是这样吗
{
"data":{
"name":[
{
"fName":"John",
"lName":"Doe"
},
{
"fName":"test",
"lName":"test2"
}
]
}
}
答案 0 :(得分:4)
您发布的内容并不是真正有效的JSON,因为data
对象有两个具有相同值name
的键。或者更确切地说,这个JSON并不代表一个名称数组,正如你的标题所暗示的那样。
如果JSON data
意味着是一个真正的JSON对象,这意味着它类似于名称到值的哈希表,那么您应该在Java类中表示为Map
。但是,您的Test
课程只有一个Data
字段,该字段只有一个Name
字段。 Test
的一个实例在此结构中不能有多个Name
。