java - Jackson 解析包含对象数组和带有动态键的映射数组的 JSON

标签 java android json jackson

我有这样的 json:

{

    "users":{
           "1234":{
                 "firstname":"Joe",
                 "lastname":"Smith"
           },
           "9876":{
                 "firstname":"Bob",
                 "lastname":"Anderson"
           }
    },
    "jobs":[
          {
              "id":"abc",
              "location":"store"
          },
          {
              "id":"def",
              "location":"factory"
          }
    ]
}

我正在使用 Jackson 解析它,所以我一直在使用以下方法解析响应:readvalue(json, MyCustomClass.class)

MyCustomClass 的样子

public class MyCustomClass{
      @JsonProperty("jobs")
      ArrayList<Job> jobs;

      @JsonProperty("users")
      ArrayList<UserMap> usersMap;
}

现在,工作可以完美地解析为 Jobs 对象,但我无法让用户进行解析,因为他们有动态键。我阅读了 JsonAnyGetter/Setter 并尝试制作映射字符串的 UserMap 对象映射 -> 用户喜欢:

public class UserMap {

private HashMap<String,User> usersMap;


@JsonAnySetter
public void add(String key, User user){
    usersMap.put(key, user);
}

@JsonAnyGetter
public Map<String, User> getUsersMap(){
    return usersMap;
}


}

但这行不通。我认为我可以使用 TypeReference 包装器来完成它,但如果这些映射是我要返回的唯一类型,我只能想办法做到这一点。由于我得到了不同的类型(用户和工作),是否可以这样做?

最佳答案

解决方法:

public class MyCustomClass {
    @JsonProperty("users")
    public LinkedHashMap<String, User> users;

    @JsonProperty("jobs")
    public ArrayList<Job> jobs;
}    

关于java - Jackson 解析包含对象数组和带有动态键的映射数组的 JSON,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17904845/

相关文章:

java - 卡在从 JSONObject 获取 JSONArray 上

java - 通过 XJC 生成可序列化的类,无需更改 xsd

java - 与具有无限循环的线程(可调用)相结合

android翻译动画剪辑未在屏幕上显示的 View 部分

android - 为什么应用程序不调整大小以适应大屏幕 160dpi 的屏幕?

json - Angular 5 Observable映射到Json数组

json - JSON 对象在 Node.js 中是全局的吗?

java - 二维数组中最后一个元素为空

java - Websphere Application Server Network Deployment v7(非社区版)中的 servlet 容器是什么?

android - 使用 --env.aot 标志时未构建 Nativescript 应用程序