0

我有一个由 253 个位置对象组成的 json 结构。每个位置对象都有一个数组,报告随时间累积的总数(数组有 67 个元素)。

我想用一个数组(增量数组)扩展 json 结构中的每个位置对象,该数组根据累积的总数组报告增加。

以下 json 查询正确地执行了此任务:

(
    covid ~> | locations | { 
        "new_total" : $map(cumulated_total, function($v, $i, $a) {$a[$i]-($i=0 ? 0 : $a[$i-1])}) 
        } |;
)

该查询的问题是在我的英特尔 NUC 设备上执行大约需要 66 秒。

JSONata 练习器链接包含 json 输入结构的示例以及我使用的查询:

请注意,当我打开该链接时,它正在报告Expression evaluation timeout: Check for infinite loop,因为查询也需要很长时间才能在我的 JSONata 练习器窗口中执行。

4

2 回答 2

1

不确定它是否有很大的不同,但您可以尝试将函数定义拉到顶层,以便它只完成一次(因为您不依赖函数体中的任何词法上下文):

(
    $fn := function($v, $i, $a) {$v-($i=0 ? 0 : $a[$i-1])};
    covid ~> | locations | { 
        "new_total" : $map(cumulated_total, $fn) 
        } |;
)
于 2020-03-30T09:24:58.913 回答
0

以下查询性能更高(总时间为 47 秒)。因此,与原始帖子中的查询(总时间 66 秒)相比,这提高了 19 秒的性能。

(
    covid ~> | locations | { 
        "new_total" : $map(cumulated_total, function($v, $i, $a) {$v-($i=0 ? 0 : $a[$i-1])}) 
        } |;
)

如您所见,我只在功能代码中进行了$a[$i]更改。$v

于 2020-03-29T15:52:13.483 回答