[英]Parse Java String of JSON to keep only relevant fields
因此,在我的 Java 应用程序中,我调用了 API,它以以下格式将数据作为字符串返回:
String1
1 =
{
"data":{
"metadata":{
// something
}
"node":{
"edges":[
{//edge 1},
{//edge 2},
...
]
}
}
}
现在由于分页数据,我不得不多次调用 API。 因此,我有String1
, String2
,..., StringN
。
现在我想生成一个StringComposite
,它应该省略其他字段并将所有edges
json 对象组合到一个列表中,如下所示:
{
"edges":[
{//edge 1},
{//edge 2},
{//edge 3},
{//edge 4},
...
]
}
我怎样才能做到这一点?
一种可能的解决方案:
例如,使用 Lombok @Data
和 Jackson @JsonIgnoreProperties
注解
@Data
public class Root {
private Data data;
}
@Data
@JsonIgnoreProperties(ignoreUnknown = true)
public class Data {
// metadata field is skipped
private List<Edge> edges;
}
StringComposite
可以这样定义:@Data
@AllArgsConstructor
public class StringComposite {
private List<Edges> edges;
}
Root
POJO,然后使用Stream::flatMap
将其合并为单个StringComposite
:ObjectMapper om = new ObjectMapper();
List<String> apiResponses = ...; // build list of API responses
List<Edge> mergedEdges = apiResponses
.stream()
.map(str -> try {
return om.readValue(str, Root.class);
} catch (JsonParseException | JsonMappingException jex) {
throw new IllegalArgumentException(jex);
}) // Stream<Root>
.flatMap(root -> root.getEdges().stream()) // Stream<Edge>
.collect(Collectors.toList()); // List<Edge>
StringComposite result = new StringComposite(mergedEdges);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.