gpt4 book ai didi

java - 使用 Streaming API 和 Json Parser 进行 JSON 解析 - 混合模式

转载 作者:行者123 更新时间:2023-11-29 04:34:39 30 4
gpt4 key购买 nike

假设我有一个文件 sample.json,其中包含一个对象数组,如下所示。

[ {Name: "ABC", "email" : "abc@123.com", "city" : "NewYork"}, {Name: "XYZ", "email" : "xyz@123.com", "city" : "NewJersey"}]

我正在使用 TestNG 框架和 GSON 库来解析 JSON。

下面是我想明智地解析 JSON 对象的类。我的目标是通过数组中的名称过滤对象并仅返回该对象。我正在使用 Streaming API 来避免一次返回 json 文件中存在的所有数据。

public class JSON{

private JsonObject jsonObject;

@Test
public void readJSON(){
getJSONObject("C:\\..\\sample.json", "ABC");
readData("email");
}

public JsonObject getJSONObject(fileName, Name){
JsonReader jsonReader = new JsonReader(new FileReader(fileName));
jsonReader.beginArray();
while (jsonReader.hasNext()){
str = jsonReader.nextString();
If (str.equals(Name)){
System.out.println("Found Name");
// To get the object - we can use fromJson(jsonReader, Person.class),
// where Person.class defines all the json variables as class variables.
// But I want to use JsonParser or something like that to return just this object which has the Name "ABC"

}
}
} }

我不想创建 Person 类并使用 fromJSON 的原因是因为我将此函数用于不同类型的 JSON 字符串。所以我不喜欢为不同的字符串创建不同的类。我想使用其他东西来代替它只返回所需的对象。此外,我不确定如何使用 Streaming API 方法的 hasNext() 遍历数组以找到所需的对象。

欢迎任何意见。谢谢。

最佳答案

第 3 方库

如果您在加载整个 Json 文档时没有资源/性能问题,我会推荐 JsonPath为您提供类似于 Xpath 的访问权限,以挑选出您想要的匹配项。

但是,我假设您想要流式传输 Json 数据,因为它会导致您实际测量/测试过的实际问题。有一些关于拥有 streaming extension for JsonPath 的讨论但是我没有这方面的经验。

这让我想到了您可以使用的其他替代方案,我遇到了 the stoppable parser in JsonSurfer看起来它可以解决您的问题。

自己动手

我开始使用您的原始问题为您编写一段代码,但我发现自己在流式传输 Json 时必须创建每个 Person 类,这似乎是您试图避免的。如果您想坚持使用“自己动手”的方法而不是我提到的第 3 方库,请告诉我。

我用了这个帖子Gson streaming tutorial帮助我了解如何在流式传输时解析 Json token 。

关于java - 使用 Streaming API 和 Json Parser 进行 JSON 解析 - 混合模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42178526/

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