Java 从jackson中的响应反序列化到具有指定键的类
我收到来自外部api的响应Java 从jackson中的响应反序列化到具有指定键的类,java,json,spring,jackson,Java,Json,Spring,Jackson,我收到来自外部api的响应 "success": true, "data": [ {} 我只想将数据及其对应的数组映射为整个类。 现在我有了它的包装器,但它就是+1类 public class YYYYYY { private boolean success; @JsonProperty(value = "data") private List<PipeDriveContact> arrayData; 公共类yyyyy{ 私人布尔
"success": true,
"data": [
{}
我只想将数据及其对应的数组映射为整个类。
现在我有了它的包装器,但它就是+1类
public class YYYYYY {
private boolean success;
@JsonProperty(value = "data")
private List<PipeDriveContact> arrayData;
公共类yyyyy{
私人布尔成功;
@JsonProperty(value=“data”)
私有列表数组数据;
您可以使用@JsonCreator定义构造函数并仅填充数据
或者也可以使用自定义反序列化程序
进一步阅读和举例:
也许这并不完全是您想要的,但是您可以使用
@JsonIgnoreProperties(ignoreUnknown=true)
只映射类中所需的字段:
@JsonIgnoreProperties(ignoreUnknown = true)
public class YYYYYY {
@JsonProperty(value = "data")
private List<PipeDriveContact> arrayData;
@JsonIgnoreProperties(ignoreUnknown=true)
公共类yyyyy{
@JsonProperty(value=“data”)
私有列表数组数据;
如果您绝对不需要最外层对象中的其他键,您可以根据键“data”解析出数组,然后将其单独解析到POJO中。以下是我的粗略实现:
首先,解析出数据数组:
String json = "{\"success\": true,\"data\": [{\"test\": \"some data\"}]}";
JSONObject obj = new JSONObject(json);
String data = obj.getJSONArray("data").toString();
然后,使用Jackson(或其他任何工具)创建包含所需对象的ArrayList:
ObjectMapper objectMapper = new ObjectMapper();
TypeReference<ArrayList<PipeDriveContact>> typeRef = new TypeReference<ArrayList<PipeDriveContact>>() {};
ArrayList<PipeDriveContact> dataArray = objectMapper.readValue(data, typeRef);
以下是我使用的依赖项:
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.6.3</version>
</dependency>
<dependency>
<groupId>org.json</groupId>
<artifactId>json</artifactId>
<version>20171018</version>
</dependency>
com.fasterxml.jackson.core
杰克逊数据绑定
2.6.3
org.json
json
20171018
希望这有帮助。这与
您首先需要获取阵列
String jsonStr = "{\"success\": true,\"data\": [{\"test\": \"some data\"}]}";
ObjectMapper mapper = new ObjectMapper();
JsonNode node = mapper.readTree(jsonStr);
ArrayNode arrayNode = (ArrayNode) node.get("data");
System.out.println(arrayNode);
List<PipeDriveContact> pojos = mapper.readValue(arrayNode.toString(), new TypeReference<List<PipeDriveContact>>() {});
System.out.println(pojos);
但是请相信我,除非您有一个非常令人信服的理由(而不是“我不想再有一个类”),否则我会劝阻您不要沿着这条路走下去,而是用包装器类实现它并称之为“完成”。
原因:将来您可能会从契约(swagger spec/ol JSON模式)生成POJO,或者您可能会发现“成功”字段有一些用处。在web.xml`中创建一个过滤器,从请求中删除所有不需要的属性,并将剩余的属性放回请求和控制器中,您可以将其作为
@RequestBody yyyy wrapperObj
String jsonStr = "{\"success\": true,\"data\": [{\"test\": \"some data\"}]}";
ObjectMapper mapper = new ObjectMapper();
JsonNode node = mapper.readTree(jsonStr);
ArrayNode arrayNode = (ArrayNode) node.get("data");
System.out.println(arrayNode);
List<PipeDriveContact> pojos = mapper.readValue(arrayNode.toString(), new TypeReference<List<PipeDriveContact>>() {});
System.out.println(pojos);
[{\"test\": \"some data\"}] // the json array