使用jq和外部命令在json中修改键值

给出一个print('the {d} {k} {r}' .format (d='dark',k='knight',r='rises')) 文件,如何使用json和一个外部命令来修改值?

对于我来说,我想将完整的时间戳转换为jq格式(例如,使用命令:YYYY-MM-DD

原始JSON

date --date="2019-01-02T10:00:00.000Z" "+%Y-%m-%d"

新的JSON

[{"timestamp": "2019-01-01T10:00:00.000Z"},{"timestamp": "2019-01-02T10:00:00.000Z"},{"timestamp": "2019-01-02T10:00:00.000Z"}]
qq41447815 回答:使用jq和外部命令在json中修改键值

鉴于您的示例输入,应该执行以下操作:

map(.timestamp |= .[:10])

如果这看起来过于简单,请查看jq's date manipulation builtins;您可能在这里不需要外部工具。

,
  

如何使用jq和外部命令修改值

虽然不是很漂亮,但是可以做到:

jq --argjson update "$(jq -r '.[] | .timestamp' input.json |
    while read r ; do
      date --date="$r" "+%Y-%m-%d" 
    done |
    jq -nR [inputs] )" '
      reduce range(0;$update|length) as $i (.;
        .[$i].timestamp = $update[$i])
    ' input.json

(在某些环境中,可能需要调用gdate而不是date。)

,

对于time.json =

[{"timestamp": "2019-01-01T10:00:00.000Z"},{"timestamp": "2019-01-02T10:00:00.000Z"},{"timestamp": "2019-01-02T10:00:00.000Z"}]

使用

jq  '[.[]  | .timestamp |= (sub("\\.[0-9]+Z$"; "Z")  | fromdate | strftime("%Y-%m-%d"))]' time.json

产生

[
  {
    "timestamp": "2019-01-01"
  },{
    "timestamp": "2019-01-02"
  },{
    "timestamp": "2019-01-02"
  }
]

编辑注意:该子项是因为jq默认情况下不支持毫秒。因此,要使用内置的datetime函数,您必须降低毫秒数。其他答案在功能上也是正确的。但是我喜欢我的:-)

本文链接:https://www.f2er.com/3130227.html

大家都在问