1

我有一个这样的 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"

}

我已使用 json 节点进行身份验证,将其映射到 UserData.java 类,如下所示。

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

现在我想将动态的值 user_admin 和 user_employee 映射到另一个具有名称、部门、用户 ID 的类。我创建了一个类 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 
4

1 回答 1

0

鉴于您的 JSON 结构auth是一个,您需要将其转换为对象array数组。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;
}

然后,在UserAdmin和中UserEmployee,您应该有对应于 JSON 中每个属性的字段(姓名、部门等)。

于 2017-09-05T15:46:50.637 回答