java - Jackson 数据绑定(bind)模型解码对象数组

标签 java json jackson

好吧,我有一个 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/

相关文章:

python - geo_point映射python和StreamSets随Elasticsearch失败

java - 无法使用 Java/Hibernate 反序列化 NativeQuery 中的 DateTime

java - 强制 Jackson 将 LocalDate 序列化为数组

java - 除非调整 JFrame 大小,否则图像不会出现

java - AWS Lambda Java 返回带斜杠的字符串

jquery - Knockout.js:无法解析 JSON 中的绑定(bind)

java - CSV 生成器不支持属性的数组值

java - 计算文本文件中的字符数

java - 为什么 Double.infinite 不为无限分数返回 true?

java - 如何为 Gradle 任务创建别名?