gpt4 book ai didi

java - 使用 Jackson 读取单个 JSON 事件

转载 作者:行者123 更新时间:2023-11-30 05:03:35 26 4
gpt4 key购买 nike

我有一个包含多个 JSON 对象的文件,每个对象都可能包含其他对象和数组。

我想将其反序列化,最好使用 Jackson 库,将其反序列化为维护顶级对象分离的数据结构,例如Java HashMap<String, String> 的数组或列表对象,其中每个 HashMap将包含文件中单个顶级 JSON 对象的数据。

据我所知,你无法获得 HashMap<String, String>来自 jackson ,所以我必须忍受 HashMap<String, Object> :

List<HashMap<String,Object>> values = new ObjectMapper().readValue(new BufferedReader(new FileReader(path)), new TypeReference<List<HashMap<String, Object>>>() {});

上面的反序列化按预期工作,但是我得到了所有文件数据,而不是单个 JSON 对象的数据,如我所愿。

有什么想法吗?

谢谢!

最佳答案

经过相当多的努力,这里有一个似乎有效的简单方法:

Reader inputReader = new BufferedReader(new FileReader(filename));

int readEvents = 0;

JsonFactory factory = new JsonFactory();

JsonParser parser = factory.createJsonParser(inputReader);

JsonToken token = null;
ObjectMapper mapper = new ObjectMapper();
HashMap<String,Object> attributes = null;
ArrayList<Map<String,Object>> matchedEvents = new ArrayList<Map<String,Object>>();

try
{
while ((token=parser.nextToken()) != null)
{
if (token == JsonToken.START_OBJECT)
{
readEvents++;
attributes = mapper.readValue(parser,
new TypeReference<HashMap<String, Object>>() {});
if (attributes != null)
{
matchedEvents.add(attributes);
}
}
}
}
catch (Exception e)
{
e.printStackTrace();
}

System.out.println("Read " + readEvents + " events");

每个 HashMap<String, Object>上面放置的物体 ArrayList对应于单个(顶级)JSON 事件。

readValue()方法显然不会返回 Map(String, String)对象。

关于java - 使用 Jackson 读取单个 JSON 事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5853087/

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