用另一个json替换json中的值

时间:2017-08-10 12:28:47

标签: json dictionary jq

我有一个json文件,格式如下:

{userid: 1, client_visited: [1001, 1002]}
{userid: 2, client_visited: [1001, 1004]}
{userid: 3, client_visited: [1004, 1006]}
{userid: 4, client_visited: [1003, 1005, 1006]}
{userid: 5, client_visited: [1006]}

我有一个从MYSQL db输出的客户端映射:

{"1001": a, "1002": b, "1003": c, "1004": d, "1005": e, "1006": f}

如何为以下输出更新上述json文件?

{userid: 1, client_visited: ['a', 'b']}
{userid: 2, client_visited: ['a', 'd']}
{userid: 3, client_visited: ['d', 'f']}
{userid: 4, client_visited: ['c', 'e', 'f']}
{userid: 5, client_visited: ['f']}

我正在查看jq命令以在shell脚本中实现此目的。

1 个答案:

答案 0 :(得分:0)

不像peak的答案那样简洁,但这里有一个解决方案,使用 reduce 来迭代更新每个元素的client_visited索引。

reduce (.client_visited|range(length)) as $i (
    .
  ; .client_visited[$i] |= $arg[tostring]
)

要指定$arg,您可以使用--argfile并使用类似

的内容进行调用
jq --argfile arg mapping.json -f filter.jq data.json