我有一个描述对象列表的JSON文档,它看起来像这样:
[
{
"txId": "ffff",
"sender" : "0xwwwwwww",
"recepient" : "0xeferfef"
},
{
"txId": "ffff",
"sender" : "0xwwwwwww",
"recepient" : "0xeferfef"
}
...
...
]
如何仅使用Jackson API从每个对象中获取List<String>
包含txId
值的信息(无需将此JSON转换为pojo对象列表,然后通过foreach处理此列表并创建新的字符串列表)?
您始终可以JsonNode
使用Jackson API将JSON文档作为对象读取(无需创建POJO)。接下来,有几种读取和处理表示为JsonNode
对象的数据的方法。Java 8+提供的最方便的方法之一是创建一个,java.util.Stream<JsonNode>
并收集从JsonNode
到的映射结果的最终列表String
,其中String
表示node.txId
字段的值。
您可以创建java.util.Stream<JsonNode>
具有:
java.util.stream.StreamSupport.stream(jsonNode.spliterator(), false)
然后您可以调用map(node -> node.get("txId").textValue()
,最后调用collect()
以终止流并获得预期的结果。
考虑以下代码作为示例(需要Java 8+):
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
import java.io.IOException;
import java.util.List;
import java.util.stream.Collectors;
import java.util.stream.StreamSupport;
final class JacksonReadExample {
public static void main(String[] args) throws IOException {
final String json = " [\n" +
" {\n" +
" \"txId\": \"ffff-001\",\n" +
" \"sender\" : \"0xwwwwwww\",\n" +
" \"recepient\" : \"0xeferfef\"\n" +
" },\n" +
" {\n" +
" \"txId\": \"ffff-002\",\n" +
" \"sender\" : \"0xwwwwwww\",\n" +
" \"recepient\" : \"0xeferfef\"\n" +
" }\n" +
"]";
final ObjectMapper mapper = new ObjectMapper();
final JsonNode jsonNode = mapper.readTree(json);
final List<String> ids = StreamSupport.stream(jsonNode.spliterator(), false)
.map(node -> node.get("txId").textValue())
.collect(Collectors.toList());
System.out.println(ids);
}
}
输出:
[ffff-001, ffff-002]
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句