sh - sh:如何使用 jq 将数组写入 json 文件
问题描述
如何将数组写入 json 文件?
#!/bin/sh
declare -A myarray
myarray["testkey"]="testvalue"
myarray["testkey1"]="testvalue1"
myarray["testkey2"]="testvalue2"
jq -n --arg $myarray[@] > file.json
编辑:
json 文件应包含以下内容:
{
"testkey": "testvalue",
"testkey1": "testvalue1",
"testkey2": "testvalue2"
}
解决方案
这是一种在序列化关联数组之前不需要额外步骤的方法:
jq -n '
$ARGS.positional|
. as $a|
(length/2) as $l|
[range($l)|{key:$a[.],value:$a[.+$l]}]|
from_entries' --args "${!myarray[@]}" "${myarray[@]}"
它甚至可以在键或值中使用换行符。需要注意的是,从技术上讲, bash 并不能保证${!myarray[@]}
输出键的顺序与${myarray[@]}
输出值的顺序相同。它在实践中确实做到了这一点,很难想象一个不会这样做的实现,但如果你真的想要安全的话,这里有一个Inian 答案的变体,它应该对换行符是安全的。它还组装了一个对象。
for key in "${!myarray[@]}"; do
printf "%s\0%s\0" "$key" "${myarray[$key]}"
done |
jq -sR '
split("\u0000")|
. as $elements|
[range(length/2)|{key:$elements[2*.],value:$elements[2*.+1]}]|
from_entries'
推荐阅读
- c# - 如何为 LEFT JOIN 为 GROUP BY 的表编写 LINQ?
- java - LibGDX - 平铺地图不渲染
- python - GET 请求中的请求表单烧瓶为空
- go - HDFS 客户端拨号 tcp:在 127.0.0.11:53 上查找 xxx(我的主机名):没有这样的主机
- python - 我在运行 MIT 6.0001 F16 pset5 ps5.py 时遇到了 RecursionError
- django - Django从模型对象过滤后删除重复项
- javascript - 如何将组件传递给 React js 中的组件?
- python - Private PyPI Server 错误:访问索引页面时出现 403 Forbidden
- c# - C#:获取布尔值和字符串返回
- php - 如何在 Magento 2 中检索父类别 URL?