如何将json节点中的动态键映射到类?

时间:2017-09-05 15:40:34

标签: java json objectmapper jsonparser

我有一个这样的json,我曾经使用对象映射器将它映射到一个类,我在类UserData.java中将 auth 视为JsonNode

    {
  "auth": [
    {
      "user_admin": [
        {
          "name": [
            "harry"
          ],
          "department": [
            "MC"
          ],
          "userid": [
            "1234"
          ]
        }
      ]
    },
    {
      "user_employee": [
        {
          "name": [
            "stella"
          ],
          "department": [
            "CC"
          ],
          "role": [
            "employee"
          ]
        }
      ]
    }
  ],
  "language":"english",
  "sub": "f598ab"

}

我已将 auth 的json节点用于将其映射到UserData.java类,如下所示。

 @Getter@Setter
    private JsonNode authorization;
    @Getter@Setter
    private String language;
     @Getter@Setter
    private String sub;

现在我想将值为user_admin和user_employee的值映射到另一个具有name,department,userid的类。我创建了一个类auth.java并将此代码放入其中。

 @Getter    @Setter
        private List< String> name;

        @Getter @Setter
        private List<String> department;

        @Getter @Setter
        private List<String> userid;
       @Getter  @Setter
       private List<String> role;

现在我已经尝试了以下代码来映射它,但它无法正常工作

UserData mappedObject=  (UserData)commonUtils.readJsonStringRespondToObjRequest((json), UserData.class);
Auth roleData=  mapper.treeToValue(mappedObject.getAuth(), Auth.class);

我得到的错误是

Can not deserialize instance of Auth.java out of START_ARRAY 

1 个答案:

答案 0 :(得分:0)

鉴于您的JSON结构autharray,您需要将其转换为Auth个对象的数组。

Auth[] roleData = mapper.treeToValue(mappedObject.getAuth(), Auth[].class);

此外,在Auth课程中,您应该拥有这些属性。

class Auth {
   @Getter @Setter
   UserAdmin user_admin;
   @Getter @Setter
   UserEmployee user_employee;
   @Getter @Setter
   String language;
   @Getter @Setter
   String sub;
}

然后,在UserAdminUserEmployee中,您应该在JSON(名称,部门等)中拥有与每个属性对应的字段。