2012-03-11 56 views
2

好吧,我有一个JSON文件,它有一组对象,我希望解组到对象数组中。Jackson数据绑定模型解组对象数组

的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; 
} 

然后名称类只是

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 

却忽略了名字对象,即李四。我想要的是将这些名称对象中的每一个都放在一个ArrayList中,这样我就可以访问这些信息,并随时显示它。

我在这里做错了什么?我试图改变JSON文件,使名称到一个数组,然后改变数据类的代码,使名对象名称的数组,却得到了一个错误说

Can not deserialize instance of Data out of START_ARRAY token 

会有人能够指出我在这里正确的方向,因为已经尝试了许多不同的解决方案,但没有成功。

预先感谢任何帮助

编辑:

如果我JSON这个样子,然后

{ 
"data":{ 
    "name":[ 
     { 
     "fName":"John", 
     "lName":"Doe" 
     }, 
     { 
     "fName":"test", 
     "lName":"test2" 
    } 
    ] 
} 
} 

回答

4

你贴什么是不是真的有效的JSON作为data对象有两个键具有相同的值name。或者说,这个JSON并不像你的标题所表明的那样代表一个名称数组。

如果JSON data是为了成为一个真正的JSON对象,这意味着它是类似的名称到值的哈希表,那么你应该代表比你的Java类作为Map。但是你的Test类有一个单独的Data字段,其​​中有一个单独的Name字段。 Test的一个实例在此结构中不能有多个Name

+0

好的,我更新了我的帖子。我的JSON应该看起来像我更新我的帖子? – AdamM 2012-03-11 18:57:01

+3

JSON看起来更合乎逻辑。为了将其映射到Java POJO,您希望在Data类中将'name'数组表示为'List '。 – 2012-03-11 22:24:26

+0

非常感谢,它现在完美! – AdamM 2012-03-12 08:09:18