我从外部api得到回应
"success": true,
"data": [
{}
我想只将数据和它的相应数组映射为整个类。 现在我有它的包装,但它只是+1级。
public class YYYYYY {
private boolean success;
@JsonProperty(value = "data")
private List<PipeDriveContact> arrayData;
答案 0 :(得分:0)
您可以使用@JsonCreator来定义构造函数并仅填充数据
或者您也可以使用自定义反序列化器。
进一步阅读和示例:
答案 1 :(得分:0)
也许这不完全符合您的要求,但您只能使用@JsonIgnoreProperties(ignoreUnknown = true)
映射课程中所需的字段:
@JsonIgnoreProperties(ignoreUnknown = true)
public class YYYYYY {
@JsonProperty(value = "data")
private List<PipeDriveContact> arrayData;
答案 2 :(得分:0)
如果绝对不需要最外层对象中的其他键,则可以根据键“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);
以下是我为测试而创建的模型POJO:
public class PipeDriveContact {
private String test;
public String getTest() { return test; }
public void setTest(String test) { this.test = test; }
}
以下是我使用的依赖项:
<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>
希望这有帮助。
答案 3 :(得分:0)
这类似于https://stackoverflow.com/a/19097149/6785908
首先需要获取数组
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);
打印(使用toString()
)
[{\"test\": \"some data\"}] // the json array
但请相信我,除非你有一个非常令人信服的理由(而不是“我不想再增加一个课程”),否则我会阻止你走这条路,而是用包装类实现它并调用它。 原因:将来你可以根据合同生成Pojos(swagger spec / ol JSON模式),或者你可以找到一些用于“成功”字段。