有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

如何为下面的json结构声明java bean

下面是作为webservice响应的一部分的json响应,其中内部对象名是动态的值。无法理解如何声明等效的java bean

{
  "error": [
    {
      "fea09b93175b626e4bb3d248ccb890bc": {
        "name": "80_5595_10.zip (5.0)",
        "error": [
          "Location path does not exist"
        ]
      }
    },
    {
      "5a8745c1967adabe9d492d3595f37ce1": {
        "name": "80_7208_01.zip (5.0)",
        "error": [
          "Location path does not exist"
        ]
      }
    }
] 

共 (1) 个答案

  1. # 1 楼答案

    您可以这样做(例如使用Jackson)。 我声明了一个bean,如下所示:

    class Error {
        String id;
        String name;
        List<String> error;
    
        // Getters / Setters
    
        @Override
        public String toString() {
           return "id="+id+", name="+name+", error="+error;
        }
    }
    

    您的JSON结构是Map<String, List<Map<String, Error>>>

    // Parse your JSON into a Map<String, List<Map<String, Error>>>
    ObjectMapper mapper = new ObjectMapper();
    Map<String, List<Map<String, Error>>> map =
        mapper.readValue(json, new TypeReference<Map<String, List<Map<String, Error>>>>() {});
    

    你现在有了这个地图结构

    { error = [
        { fea09b93175b626e4bb3d248ccb890bc = Error@36d64342 }, 
        { 5a8745c1967adabe9d492d3595f37ce1 = Error@39ba5a14 }
      ]
    }
    

    然后获取映射的每个错误元素,并将它们的id设置为与键相同。并将它们添加到列表中

    List<Map<String, Error>> errorsMap = map.get("error");
    List<Error> errors = new ArrayList<>();
    for(Map<String, Error> errorMap : errorsMap) {
        String key = new ArrayList<>(errorMap.keySet()).get(0);
        Error error = errorMap.get(key);
        error.setId(key);
        errors.add(error);
    }
    
    errors.forEach(System.out::println);
    

    产出:

    id=fea09b93175b626e4bb3d248ccb890bc, name=80_5595_10.zip (5.0), error=[Location path does not exist]
    id=5a8745c1967adabe9d492d3595f37ce1, name=80_7208_01.zip (5.0), error=[Location path does not exist]