使用 jq 从 Bash 数组创建对象数组

Jgh*_*n14 3 arrays bash jq

我正在尝试使用 jq 在 bash 中创建一个给定数组的对象数组。

这是我被困住的地方:

IDS=("baf3eca8-c4bd-4590-bf1f-9b1515d521ba" "ef2fa922-2038-445c-9d32-8c1f23511fe4")
echo "${IDS[@]}" | jq -R '[{id: ., names: ["bob", "sally"]}]'
Run Code Online (Sandbox Code Playgroud)

结果是:

[
   {
     "id": "baf3eca8-c4bd-4590-bf1f-9b1515d521ba ef2fa922-2038-445c-9d32-8c1f23511fe4",
     "names": [
       "bob",
       "sally"
     ]
   }
]
Run Code Online (Sandbox Code Playgroud)

我想要的结果:

[
   {
     "id": "baf3eca8-c4bd-4590-bf1f-9b1515d521ba",
     "names": [
       "bob",
       "sally"
     ]
   },
   {
     "id": "ef2fa922-2038-445c-9d32-8c1f23511fe4",
     "names": [
       "bob",
       "sally"
     ]
   }
]
Run Code Online (Sandbox Code Playgroud)

任何帮助将非常感激。

pmf*_*pmf 5

使用将 bash 数组拆分为NUL- 分隔的项目,然后使用或printf '%s\0'读取原始流,并在过滤器中使用和 分隔符将它们拆分为数组:-R--raw-inputjqsplit"\u0000"

printf '%s\0' "${IDS[@]}" | jq -Rs '
  split("\u0000") | map({id:., names: ["bob", "sally"]})
'
Run Code Online (Sandbox Code Playgroud)

  • @dan你是对的,我忘记了“--slurp”输入。修复。 (2认同)