为了账号安全,请及时绑定邮箱和手机立即绑定

使用嵌套对象列表反序列化 json

使用嵌套对象列表反序列化 json

子衿沉夜 2022-12-28 16:21:53
我想使用 jackson-databind 将一个 json 反序列化为一个包含其他对象列表的对象。我正在尝试在 json 下反序列化。我有 Class class1,它有一个List<NestedProp>. Prop2 是一个数组列表。List<NestedProp> prop2.结构类`class Class1 {  String prop1;  List<NestedProp> prop2;  //setters getters}class NestedProp {  String p1;  String p2;  //setters getters}````  "class1": {    "prop1": "pp",    "prop2": [      {        "nestedProp": [          {            "p1": "127",            "p2": "1"          },          {            "p1": "128",            "p2": "2"          }        ]      }    ]  }While deserialisingI get the below exception:>com.fasterxml.jackson.databind.exc.MismatchedInputException: Cannot construct instance of `NestedProp` (although at least one Creator exists): no String-argument constructor/factory method to deserialize from String value ('127') at [Source: (File); line: 59, column: 7] (through reference chain: java.util.ArrayList[1]->Class1["prop2"]->java.util.ArrayList[0])    List<Class1> testData = objectMapper.readValue(test.json, Class1.class);
查看完整描述

1 回答

?
蝴蝶不菲

TA贡献1810条经验 获得超4个赞

您的JSON有效负载中有两个数组。所以,你需要POJO为它创建额外的。请参阅以下示例:


import com.fasterxml.jackson.databind.ObjectMapper;


import java.io.File;

import java.util.List;


public class JsonApp {


    public static void main(String[] args) throws Exception {

        File jsonFile = new File("./resource/test.json").getAbsoluteFile();


        ObjectMapper mapper = new ObjectMapper();

        Root root = mapper.readValue(jsonFile, Root.class);

        System.out.println(root);

    }

}


class Root {


    private Class1 class1;


    //getters, setters, toString

}


class Class1 {


    private String prop1;

    private List<NestedProps> prop2;


    //getters, setters, toString

}


class NestedProps {


    private List<NestedProp> nestedProp;


    //getters, setters, toString

}


class NestedProp {

    private String p1;

    private String p2;


    //getters, setters, toString

}

对于以下JSON:


{

  "class1": {

    "prop1": "pp",

    "prop2": [

      {

        "nestedProp": [

          {

            "p1": "127",

            "p2": "1"

          },

          {

            "p1": "128",

            "p2": "2"

          }

        ]

      }

    ]

  }

}

以上示例打印:


Root{class1=Class1{prop1='pp', prop2=[NestedProps{nestedProp=[NestedProp{p1='127', p2='1'}, NestedProp{p1='128', p2='2'}]}]}}


查看完整回答
反对 回复 2022-12-28
  • 1 回答
  • 0 关注
  • 142 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信