gpt4 book ai didi

java - 使用 Jackson Streaming API 从数组中提取对象

转载 作者:太空宇宙 更新时间:2023-11-04 09:41:11 25 4
gpt4 key购买 nike

我一直在尝试使用 Java 中的 Jackson Streaming API 来处理以下内容:

{
"objs": [
{
"A": {
"a": "b",
"c": "d"
},
"B": {
"e": "f",
"g": "h"
},
},
{
"C": {
"i": "j",
"k": "l"
},
"D": {
"m": "n",
"o": "p"
},
}
]
}

对于 objs 下数组中的每个顶级对象键(在此示例中,具有键“A”和“B”的对象,以及具有键“C”和“D”的另一个对象)我想将每个对象提取为原始字符串;我可能需要解析数以万计的数据,因此我不想将它们映射到模型对象。

我无法弄清楚如何执行此操作,因为当我迭代 JSON 标记时,我无法识别 boolean 条件来告诉我我位于其中一个对象的确切开头。此外,一旦我确定了这一点,我该如何使用流 API 提取对象,然后继续下一个?

我习惯于使用 Jackson 的自动反序列化功能,当我尝试在流媒体环境中考虑它时,这让我感到困惑。

最佳答案

您的场景应该可以通过JsonPath轻松解决解决此类问题的库。下面的示例打印所有必需的子节点:

import com.jayway.jsonpath.JsonPath;

import java.io.File;
import java.util.List;
import java.util.Map;

public class JsonPathApp {

public static void main(String[] args) throws Exception {
File jsonFile = new File("./resource/test.json").getAbsoluteFile();

List<Map> nodes = JsonPath.parse(jsonFile).read("$.objs.*.*");
nodes.forEach(System.out::println);
}
}

打印:

{a=b, c=d}
{e=f, g=h}
{i=j, k=l}
{m=n, o=p}

使用Jackson,您可以使用readTree方法将给定的JSON负载读取为树。请参阅下面的示例:

import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.node.ArrayNode;

import java.io.File;

public class JsonApp {

public static void main(String[] args) throws Exception {
File jsonFile = new File("./resource/test.json").getAbsoluteFile();

ObjectMapper mapper = new ObjectMapper();
JsonNode root = mapper.readTree(jsonFile);
ArrayNode objs = (ArrayNode) root.at("/objs");
objs.forEach(node -> {
node.forEach(property -> {
System.out.println(property.toString());
});
});
}
}

上面的代码打印:

{"a":"b","c":"d"}
{"e":"f","g":"h"}
{"i":"j","k":"l"}
{"m":"n","o":"p"}

关于java - 使用 Jackson Streaming API 从数组中提取对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55976047/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com