Jackson Data绑定模型解组对象数组

时间:2012-03-11 18:08:28

标签: java json jackson

好的我有一个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"
     }
   ]
 }
}

1 个答案:

答案 0 :(得分:4)

您发布的内容并不是真正有效的JSON,因为data对象有两个具有相同值name的键。或者更确切地说,这个JSON并不代表一个名称数组,正如你的标题所暗示的那样。

如果JSON data意味着是一个真正的JSON对象,这意味着它类似于名称到值的哈希表,那么您应该在Java类中表示为Map。但是,您的Test课程只有一个Data字段,该字段只有一个Name字段。 Test的一个实例在此结构中不能有多个Name