使用 bash 解析多维 json 数组

使用 bash 解析多维 json 数组

我想在 bash 中迭代多维 json 数组,但尚未找到解决方案。

多维数组如下所示:

{
    "FILES": [
      [ "file1.yaml", "file2.yaml", "file3.yaml" ],
      [ "file1.json", "file2.json" ]
    ]
}

我想将每个数组转换为一个字符串,该字符串最终将成为命令的输入。

所以像这样:

#!/bin/bash

Json_Array=$(cat <<EOF
{
    "FILES": [
      [ "file1.yaml", "file2.yaml", "file3.yaml" ],
      [ "file1.json", "file2.json" ]
    ]
}
EOF
)

function runCmd ()
{
  echo "command $1"
}

function runCmds ()
{
  jq -c '.FILES' <<< "$Json_Array" | while read i; do
    runCmd "$(echo $i | jq .)"
  done
}

runCmds

所以输出应该是:

command file1.yaml file2.yaml file3.yaml
command file1.json file2.json

感谢您的任何帮助!

答案1

在每个数组的开头插入带有任何选项的命令,然后传递每个数组@sh以创建 shell 代码。评估 shell 代码。

在这里,我还展示了如何向命令 (-a-b hello) 插入额外的参数:

eval "$( jq -r '.FILES | map([ "command", "-a", "-b", "hello", .[] ])[] | @sh' file.json )"

给定问题中的 JSON,这将在 shell 中执行以下命令:

'command' '-a' '-b' 'hello' 'file1.yaml' 'file2.yaml' 'file3.yaml'
'command' '-a' '-b' 'hello' 'file1.json' 'file2.json'

如果您的 JSON 文档位于某个变量中,$json则使用

eval "$( jq -r '.FILES | map([ "command", "-a", "-b", "hello", .[] ])[] | @sh' <<<"$json" )"

相关内容