如何使用jq命令行实用程序执行JSON对象更新

时间:2016-10-13 08:45:49

标签: javascript json shell jq

我有一个JSON对象如下

  

{“Sample”:[{“key”:“KeyName”,“values”:[[1025409600000,   10],[1028088000000,-6.3382185140371]            ]}]}

使用javascript我可以修改任何值,如下所示

data.Sample[0].values.push([1028088000000,0]);

如何使用jq命令行json处理器执行类似的操作?所以JSON对象变成了

  

{“Sample”:[{“key”:“KeyName”,“values”:[[1025409600000,10],   [1028088000000,0]]}]}

谢谢。

1 个答案:

答案 0 :(得分:2)

由于Javascript的Array.push附加到数组,因此问题中存在一个错误。

给定表达式的jq等价物:

data.Sample[0].values.push([1028088000000,0]);

将是:

.Sample[0].values += [[1028088000000,0]]

或者如果您想使用Javascript语法,您可以定义def push(x): .[length] = x;

如果你想将values数组中的最后一个值替换为另一个值,比如$ x,你可以(使用jq 1.5或更高版本)写:

.Sample[0].values[-1] = $x

更强大(针对不同的jq版本)方法将是:

.Sample[0].values |= (.[length-1] = $x)

使用jq 1.5或更高版本,如果你只想将负数更改为0,你会写:

    .Sample[0].values[-1][-1] = 0