java - 解析 JSON 并转换为对象列表

标签 java json spring-boot

我从 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"])

我想转换列表中的上述 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>(){});

关于java - 解析 JSON 并转换为对象列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55415382/

相关文章:

java.lang.ClassCastException : ConditionalOnJava$JavaVersion cant be cast to org. springframework.boot.system.JavaVersion 错误

java - 使用 Spring REST 时 URL 中出现错误消息

java - JLabel 到 GridBagLayout。如何固定宽度?

java - 如何使用 Netbeans 6.5 将文件添加到 jar 中?

java 8 如何仅从 SummaryStatistics 返回总和和计数值

javascript - 在 Javascript 中合并(或 concat 、combine ?)一个 Object 的数组

javascript - 通过添加key修改Json结果

jQuery-UI AutoComplete 不适用于动态字段

spring-boot - Camel Upgrade 2.22 破坏了 Apache CXF 端点

java - 如何从文本文件的下一行读取并暂停,以便我稍后再读取该行之后的内容?