我有一个描述对象列表的JSON文档,它看起来像这样:
[
{
"txId": "ffff",
"sender" : "0xwwwwwww",
"recepient" : "0xeferfef"
},
{
"txId": "ffff",
"sender" : "0xwwwwwww",
"recepient" : "0xeferfef"
}
...
...
]
Run Code Online (Sandbox Code Playgroud)
如何只使用Jackson API 获取List<String>包含txId每个对象的值(不将此JSON转换为pojo-objects列表,然后通过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)
Run Code Online (Sandbox Code Playgroud)
然后你可以调用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);
}
}
Run Code Online (Sandbox Code Playgroud)
输出:
[ffff-001, ffff-002]
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
338 次 |
| 最近记录: |