将 jq 与 xargs 结合使用

将 jq 与 xargs 结合使用

我有一个 json 文件n用户。我需要为每个用户用不同的 UUID 替换 id 字段。之后,我需要制作ncurl 调用 json 作为有效负载。我该如何实现?

我的 json 文件:

[{
  "id": "a3d920e",
  "name": "Alice",
  "age": 17
},{
  "id": "18db903",
  "name": "Bob",
  "age": 71
},{
  "id": "ff9a32c",
  "name": "Carol",
  "age": 30
}]

我尝试了这个命令: jq -c '.[] | objects' mydata.json | jq -c --arg a "$(uuidgen)" '.id = $a'

使用该命令,我可以替换 id 字段,但我需要为每个用户提供唯一的 UUID,而该命令为所有用户提供了相同的 UUID。之后,我需要运行curl -X POST http://localhost:8080 n以每个 json 对象作为有效负载(对于这个示例文件,Alice 一次,Bob 一次,Carol 一次)。

我尝试使用 xargs 来实现这一点,但不知道如何将它与 jq 一起运行。

答案1

由于每个对象都是一行,因此您可以read循环读取对象:

jq -c '.[] | objects' mydata.json  | while read obj ; do
    jq -c --arg id "$(uuidgen)" '.id = $id' <<< "$obj" \
    | curl -X POST -d @- http://localhost:8080
done

告诉-d @-curl 从标准输入读取有效负载。

相关内容