【问题标题】:how to map dynamic key in a json node to a class?如何将json节点中的动态键映射到类?
【发布时间】:2017-09-05 15:40:33
【问题描述】:

我有一个这样的 json,我曾经使用对象映射器将它映射到一个类,我将 auth 视为类 UserData.java 中的 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 映射到另一个具有名称、部门、用户 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 

【问题讨论】:

  • 尝试反序列化为 Auth 数组而不是单个 Auth 对象。
  • 怎么做? @alayor

标签: java json objectmapper jsonparser


【解决方案1】:

鉴于您的 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 中每个属性的字段(姓名、部门等)。

【讨论】:

  • 它给了我意想不到的字段 user_admin 因为 user_admin 和 user_employee 是动态的@alayor
  • 错误是因为Auth类没有user_adminuser_employee字段。
  • 这些值是动态的,并且随着响应的变化而变化,如何掌握它们,这就是我长期以来卡住的地方,请帮助我@alayor
  • 有什么方法可以获取 user_admin,user_employee @alayor 的动态值
  • 我认为您需要解释 dynamic 在您的情况下的含义。如果属性的名称发生变化或这些变化是什么。
猜你喜欢
  • 2021-06-17
  • 2020-11-11
  • 2021-01-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-05-03
  • 2016-05-14
  • 1970-01-01
相关资源
最近更新 更多