首页 > 解决方案 > 解析 JSON 并在对象列表中转换

问题描述

我从 API 调用收到了一个 json 响应,示例响应是这样的

{
 "meta": {
   "code": "200"
  },
 "data": [
   {
    "Id": 44,
    "Name": "Malgudi ABC"
  },
  {
    "Id": 45,
    "Name": "Malgudi, DEF"
  }
]
}

我正在尝试从中制作对象列表,我为此编写的代码是

private static List<TPDetails> getListOfTpDetails(ResponseEntity<?> responseEntity){
       ObjectMapper objectMapper = new ObjectMapper();
        List<TPDetails> tpDetailsList = objectMapper.convertValue(responseEntity.getBody().getClass(), new TypeReference<TPDetails>(){});
        return tpDetailsList;
    }

TPDetails 对象是这样的

public class TPDetails {
    int Id;
    String Name;
}

我使用的代码导致

java.lang.IllegalArgumentException: Unrecognized field "meta" (class com.sbo.abc.model.TPDetails), not marked as ignorable (2 known properties: "Id", "Name"])
 at [Source: UNKNOWN; line: -1, column: -1] (through reference chain: com.sbo.abc.model.TPDetails["meta"])

我想在 List 中转换上述 JSON 响应

List<TPDetails> abc = [
{"Id": 44, "Name": "Malgudi ABC"},
{"Id": 45,"Name": "Malgudi DEF"}
]

任何帮助都将不胜感激。在此先感谢

标签: javajsonspring-boot

解决方案


再创建 2 个类,例如

public class Temp {
    Meta meta;
    List<TPDetails> data;
}

public class Meta {
    String code;
}

现在将此 json 转换为 Temp 类。

Temp temp = objectMapper.convertValue(responseEntity.getBody().getClass(), new TypeReference<Temp>(){});

更新 :

确保responseEntity.getBody()返回您上面提到的确切 Json 字符串。

Temp temp = objectMapper.readValue(responseEntity.getBody(), new TypeReference<Temp>(){});

推荐阅读