当前位置: 首页 > 面试题库 >

使用JSONPath遍历大型JSON数组

花阳秋
2023-03-14
问题内容

我有一个简单的Java应用程序,它需要遍历一个大型JSON数组(包含约2万个项目),并且在每个数组中,我解析一个子数组。每个项目如下所示:

{"index":0,"f1":[2,16,16,16,16,16,32,16],"f2":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"startTime":0.0}

我正在JSONPath遍历每个项目。我要做的是首先读取长度,然后简单地遍历整个数组。但这非常慢(例如每秒1个项目)。

int length = JsonPath.read(response, "$.result.length()");
for (int i = 0; i < length; i++) {
    double start_time = JsonPath.read(response, "$.result["+i+"].startTime");
    ArrayList<Integer> f1= JsonPath.read(response, "$.result["+i+"].f1");
    //...other things
}

有没有优化的方法?


问题答案:

得到它了。多亏了Erwin,我可以一次将整个JSON解析成一个HASHMap简单的样子:

ArrayList<HashMap> json= JsonPath.read(response, "$.result");

然后我们可以简单地调用get(i)以访问循环中的特定项目:

double start_time = (double) json.get(i).get("startTime");


 类似资料:
  • 问题内容: 我有一个需要迭代的JSON文件,如下所示… 数据中的键并不总是相同的(我只是使用示例,有20个不同的键),因此,我无法设置脚本来静态引用它们以获取值。 否则我可以说 过去我在数据节点上使用了一个简单的foreach循环… 但是不想阻止脚本。有任何想法吗? 问题答案: 您可以通过以下方式遍历JavaScript对象: myobject可能是您的json.data

  • 问题内容: 我的PHP代码: 虽然它适用于非数组,但我终生无法弄清楚如何打印“审阅”数组中的所有值。 我想做的是遍历此响应,可能使用forreach(),从而得到一个包含响应中每个评论的评分和摘要的列表。 任何指导/方向将不胜感激。 以下是我正在使用的JSON。(这是Yelp API的响应)。 问题答案: 您可能会遇到麻烦,因为评论是一个数组,并且您试图将其作为JSON对象进行访问。

  • 问题内容: 我试图遍历此以获取“名称”值。这是我目前所拥有的,但是似乎没有用,从此处发布的内容中尝试了一些其他方法,但似乎无济于事。 Json被退回: 我试过使用: 有什么建议? 谢谢! 问题答案: 您必须将字符串解析为JSON(这实际上是字符串,而不是对象的指示):

  • 问题内容: 我有一个json数组: 如何使用php遍历此数组? 问题答案: 如果需要关联数组,请将第二个函数参数设置为true 如果您需要关联数组,则某些版本的php需要true的第二个参数

  • 你可以使用 for-in循环来遍历数组: for (i in myObj.sites) {   x += myObj.sites[i] + "<br>"; } 你也可以直接使用 for 循环来遍历数组: for (i = 0; i < myObj.sites.length; i++) {   x += myObj.sites[i] + "<br>"; } JSON 对象中的数组也可以包含另外一

  • 问题内容: 我正在使用play 2.1.1,并且在遍历数组时遇到问题。我读过某个地方,您可以为List [Object]创建读取,但是每次尝试执行此操作时,都会收到一条错误消息: 我无所适从。任何帮助将不胜感激。 问题答案: 您的值是一个对象,其字段包含一个数组。您试图将单个对象解析为数组。您要么必须更改为。 或将您的代码更改为