java - 解析 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"}
]
任何帮助都将不胜感激。在此先感谢
解决方案
再创建 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>(){});
推荐阅读
- jquery - 如何通过jQuery删除带有双冒号的id?
- laravel - 具有存储库模式的 Laravel 策略
- javascript - Vue:单击按钮时从父组件更改子组件的数据无法设置未定义的属性
- android - 如何从 ViewPager2 中的 EditText 获取文本?
- sql - 我无法在 Postgres 上打开我的 SQL 代码并且没有返回错误消息
- c++ - 为什么值会意外变化?inet_ntoa
- vue.js - vuetify 错误 SassError:预期的标识符
- java - 如何在 MediaPlayer 中更改音轨
- html - css clamp function with auto not working as min, value, max
- r - R:添加名称为的列