将动态 JSON 数据映射到 Java 中的 pojo class?

Map dynamic JSON data to pojo class in Java?

我正在创建一个生成和使用 Json 数据的 crud 表单。

问题: Json 我生成的数据非常动态。所以我不知道如何将它映射到我的 pojo class.

我试过的

1) Using jackson library, I created structure of my json data and 
tried mapping with it. It failed as in data "**Keys**" are dynamic so mapping failed.
2) I searched and found JsonNode provided by Jackson, problem with 
this is my json structure has key:[{},{}] structure like this 
**key-->array of objects**, so I tried parsing it with json node but failed.

我的Json数据

类型 1

{
  "city_master": [
    {
      "citycode": [
        "100",
        "1130385"
      ]
    },
    {
      "cityname": [
        "London",
        "1130383"
      ]
    },
    {
      "statecode": [
        "512",
        "1130382"
      ]
    }
  ]
}

结构问题在于 key = "city_master" 或此格式的任何键,例如("citycode"、"cityname" 等)是动态的,因此无法为此创建映射 pojo class.

然后我尝试将外键固定为 root 并解析为 Json 节点为

类型 2

{
  "root": [
    {
      "citycode": [
        "100",
        "1130385"
      ]
    },
    {
      "cityname": [
        "London",
        "1130383"
      ]
    },
    {
      "statecode": [
        "512",
        "1130382"
      ]
    }
  ]
}

在这个结构中,我丢失了我的键值,但我可以将它存储在其他地方。

使用 JsonNode (Type-2) 我试过这个

String jsonString = tdObj.getTempData(); // return's Json String
TempDataTblPojo obj = new ObjectMapper().readValue(jsonString, TempDataTblPojo.class);
JsonNode jsonNode = obj.getRoot();
System.out.println("Name = " + jsonNode);

这个classTempDataTblPojo

public class TempDataTblPojo {

    private JsonNode  root;

    public JsonNode getRoot() {
        return root;
    }

    public void setRoot(JsonNode root) {
        this.root = root;
    }
}

它打印这个

Name = [{"citycode":["100","1130385"]},{"cityname":["London","1130383"]},{"statecode":["512","1130382"]}]

现在如何解析这个Json节点,得到所有的键值对?或者是否有高效或更清洁的解决方案,我很乐意接受。

也许这会对你有所帮助。

class Pojo {

    private List<PojoItem> root;

    public List<PojoItem> getRoot() {
        return root;
    }

    public void setRoot(List<PojoItem> root) {
        this.root = root;
    }
}

class PojoItem {

    private Map<String, List<String>> items = new HashMap<>();

    public Map<String, List<String>> getItems() {
        return items;
    }

    @JsonAnySetter
    public void setItem(String key, List<String> values) {
        this.items.put(key, values);
    }
}

然后您可以使用以下方法从 json 获取它:

Pojo result = objectMapper.readValue(json, Pojo.class);