好吧,我有一个 JSON 文件,它有一组我希望将其解码到对象数组中的对象。
JSON 文件布局的示例如下:
{
"data":{
"name":{
"fName":"John",
"lName":"Doe"
},
"name":{
"fName":"James",
"lName":"Dokes"
}
}
}
完整的 JSON 文件比这复杂得多,这只是它的布局示例。
我想要做的是获取这些名称,并将它们解码到名称对象数组中,以便我可以随时访问每个名称对象。
类(class)设置为
测试类
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"
}
]
}
}
最佳答案
您发布的内容并不是真正有效的 JSON,因为 data
对象有两个具有相同值 name
的键。或者更确切地说,这个 JSON 并不像您的标题所暗示的那样表示名称数组。
如果 JSON data
是一个真正的 JSON 对象,这意味着它类似于名称到值的哈希表,那么您应该在 Java 类中将其表示为 map
。但是您的 Test
类有一个 Data
字段,该字段也有一个 Name
字段。在此结构中,一个 Test
实例不能有多个 Name
。
关于java - Jackson 数据绑定(bind)模型解码对象数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9657486/