假设我在bash中声明了以下内容:
mcD="had_a_farm"
eei="eeieeio"
declare -A animals=( ["duck"]="quack_quack" ["cow"]="moo_moo" ["pig"]="oink_oink" )
我需要以下的 JSON:
{
"oldMcD": "had a farm",
"eei": "eeieeio",
"onThisFarm":[
{
"duck": "quack_quack",
"cow": "moo_moo",
"pig": "oink_oink"
}
]
}
我知道可以使用echo、printf或将文本赋值给变量来实现此操作,但假设animals实际上非常庞大,这样做可能会很繁琐。我也可以循环遍历变量和关联数组,并在进行遍历时创建一个变量。我可以编写任何一种解决方案,但它们似乎都是"错误的方式"。更不用说处理animals中的最后一个项后,我不想再有“,”。
我认为正确的解决方案使用jq,但我很难找到有关如何使用此工具编写jsons(特别是嵌套的jsons)而不是解析它们的文档和示例。
以下是我想出的方法:
jq -n --arg mcD "$mcD" --arg eei "$eei" --arg duck "${animals['duck']}" --arg cow "${animals['cow']}" --arg pig "${animals['pig']}" '{onThisFarm:[ { pig: $pig, cow: $cow, duck: $duck } ], eei: $eei, oldMcD: $mcD }'
产生所需的结果。实际上,我并不真的关心json中键的顺序,但让jq输入反向获取它以获得所需的顺序仍然很烦人。无论如何,这个解决方案很笨拙,写起来并不比声明一个看起来像json的字符串变量更容易(而对于更大的关联数组则是不可能的)。如何以高效、合理的方式构建这样的json?
谢谢!
$ARGS.positional
- https://dev59.com/lrvoa4cB1Zd3GeqP87XI#62468416 - Inian