这是我输入文件的样子:
[
{
"ConfigType": "ABC",
"Prop1": 3,
"Prop2": 30
},
{
"ConfigType": "XYZ",
"Prop3": "Hello",
"Prop4": "World",
"Prop5": "Application"
}
]
我需要为每个项目准备插入语句。
这是我的jq命令的样子,它给了我每个项目。
cat app-cnfg.json | jq -r ".[]"
如何执行aws dynamodb put-item --table-name "xxx" --item <<array's element>>
?
答案 0 :(得分:5)
您可以应用过滤器来提取JSON数组的每个元素,并将其提供给bash
中的数组并稍后迭代其内容。假设您有bash
4.0或更高版本,则可以使用mapfile
命令作为
mapfile -t configArr < <(jq -c '.[]' < app-cnfg.json)
现在我们遍历数组,为每个配置项运行命令,
for config in "${configArr[@]}"; do
aws dynamodb put-item --table-name "xxx" --item "$config"
done
(或)使用更有效的方式使用while
循环和read
命令从输入数据流中读取(适用于不支持bash
版本的mapfile
版本readarray
或while IFS= read -r config; do
aws dynamodb put-item --table-name "xxx" --item "$config"
done< <(jq -c '.[]' < app-cnfg.json)
)
<dependency>
<groupId>net.sf.barcode4j</groupId>
<artifactId>barcode4j</artifactId>
<version>2.1</version>
</dependency>
答案 1 :(得分:5)
您可以输入xargs
:
jq -c '.[]' app-cnfg.json \
| xargs -L 1 aws dynamodb put-item --table-name "xxx" --item
jq的-c
选项确保每个元素都在一行上,而-L 1
xargs
选项确保每个项目都调用一次命令。
如果你想避免跟踪空格的潜在问题(这会使args
将后续行视为当前行的延续),你可以将对象零字节分开:
jq -j '.[] | tostring + "\u0000"' app-cnfg.json \
| xargs -0 -n1 aws dynamodb put-item --table-name "xxx" --item
-j
选项会抑制来自jq的换行符,tostring
会对对象进行字符串化,+ "\u0000"
会附加一个零字节。
xargs -0 -n1
期望零字节分隔输入,并为每个参数运行一次命令。