其他分享
首页 > 其他分享> > Jackson Json对象映射器:如何映射数组?

Jackson Json对象映射器:如何映射数组?

作者:互联网

我正在尝试从后端api调用映射数组.我该如何知道这些数据:

以下类将用于保存json数组数据:

    @Data
    private static class UserListBean {
        private List<UserBean> userList;
    }

    @Data
    private static class UserBean {
        private String id;
        private String userName;
        private String password;
    }

json将具有以下格式(以下示例仅包含一项):

[
   {
      "id":1,
      "userName":"bob",
      "password":"403437d5c3f70b1329f37a9ecce02adbbf3e986"
   }
]

我正在使用杰克逊,到目前为止,我已经尝试了以下方法,但是它一直让我发回异常

        final ObjectMapper mapper = new ObjectMapper();
        mapper.configure(Feature.FAIL_ON_UNKNOWN_PROPERTIES, false);
        final ObjectReader reader = mapper.reader(UserListBean.class);
        GeoHubAccountListBean accounts = null;

        try {
            accounts = reader.readValue(jsonString);
        } catch (final IOException ex) {
            log.error("Cannot convert JSON into a list of users", ex);
        }

在这里,最终的ObjectReader reader = mapper.reader(UserListBean.class);引发异常

Can not deserialize instance of com.xxx.XXX$UserListBean out of START_ARRAY token

任何想法 ?

谢谢

解决方法:

好吧,如果您尝试将JSON反序列化为UserListBean类型的对象,则需要反序列化JSONObject(Java对象倾向于映射到JSONObjects).

因此,您最外层的json构造应该是一个对象.您最外层的json构造是一个JSONArray.

您的UserListBean具有单个字段,即List< UserBean>.因此,您的顶级json构造(即JSONObject)应包含一个名称为“ userList”的字段,其值是JSONArray(Java集合倾向于映射到JSONArrays).

我认为这是您正在寻找的实际json:

{
  "userList":[
     {
       "id":1,
       "userName":"bob",
       "password":"403437d5c3f70b1329f37a9ecce02adbbf3e986"
     }
  ]
}

如果您无法控制传入的json,则您可能希望放弃父对象UserListBean并直接处理List< UserBean&gt ;,因为它将与您提供的json一起使用.

标签:datamapper,rest,jackson,spring,json
来源: https://codeday.me/bug/20191123/2064086.html