【问题标题】:Deserialize an object with children反序列化带有子对象的对象
【发布时间】:2018-10-10 09:11:59
【问题描述】:

我有一个使用带子对象的 Json 列表

{
 "id":"154",
 "name":"peter",
 "children": [
               {
                "id":"122",
                "name": "mick",
                "children":[]
               },
               {
                "id":"123",
                "name": "mick",
                "children":[]
               }
            ]
}

这是我的对象的类:

public class person{
                    private String id;
                    private String name;
                    private List<person> children;

//getters and setters
}

当我尝试反序列化此对象时,出现以下错误

无法从 START_ARRAY 令牌中反序列化人员实例

我该怎么办?

【问题讨论】:

  • 您的 JSON 无效。
  • 感谢您的帮助 我收到的 Json 是好的,无法更改。不过我可能重写了一些错误。
  • @Jean 然后请使用正确的 JSON 更新您的问题

标签: java json jackson


【解决方案1】:

修复 JSON 正文中的语法错误,您将处于良好状态:

{
 "id":"154",
 "name":"peter",
 "children": [
               {
                "id":"122",
                "name": "mick",
                "children":[], <== Excess comma
               } <== Missing comma 
               {
                "id":"123",
                "name": "mick",
                "children":[], <== Excess comma
               }
            ]
}

有效:

{
    "id": "154",
    "name": "peter",
    "children": [{
            "id": "122",
            "name": "mick",
            "children": []
        },
        {
            "id": "123",
            "name": "mick",
            "children": []
        }
    ]
}

【讨论】:

    【解决方案2】:

    您需要更改您的 POJO 声明,如下所示:-

     public class person{
                    private String id;
                    private String name;
                    private List<Children> children;
    
                   //getters and setters
    
       private class Children{
                    private String id;
                    private String name;
                    private String[] children;
    
    }
    

    【讨论】:

      【解决方案3】:

      JSON 包含一组人员。 您的班级是person 的列表。

      要么像@Naveed Yadav 建议的那样更改 JSON,要么将类更改为

      public class Person{
                   private String id;
                   private String name;
                   private Person[] children;
      
      //getters and setters
      }
      

      (顺便说一句,Java 中的类名应该是大写的)

      【讨论】:

        【解决方案4】:
        {
         "id":"154",
         "name":"peter",
         "children": 
                       {
                        "id":"122",
                        "name": "mick",
                        "children":[],
                       }
                       {
                        "id":"123",
                        "name": "mick",
                        "children":[],
                       }
        
        }
        

        【讨论】:

        • 或改成private person[] children;
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-04-08
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多