jq:通过shell变量追加JSON对象
简单的数据
__func() {_storage_size="100"_storage_used="200"_storage_avail="300"echo '{}' | jq \'.storage_size +="'$_storage_size'"' | jq \'.storage_used +="'$_storage_used'"' | jq \'.storage_avail +="'$_storage_avail'"' | jq}__func
{"storage_size": "100","storage_used": "200","storage_avail": "300"}
复杂数据场景
场景1
#!/usr/bin/env bash__main() {_Json=$(_time1=$(date '+%s')_time2=$(date -d @"$_time1" +'%Y-%m-%d %T')echo "{}" |jq --arg v "$_time1" '.time[0]=$v' |jq --arg v "$_time2" '.time[1]=$v' |jq --arg v "200" '.code=$v' |jq --argjson v "[1,2,3]" '.data=$v' |jq -c)echo "$_Json"}__main
{"time":["1667648450","2022-11-05 19:40:50"],"code":"200","data":[1,2,3]}
场景2
__func() {_obj_name="obj_name"_obj_json='{ "test": "json" }'echo '{ "data": {} }' | jq \--arg objectName "$_obj_name" \--argjson jsonString "$_obj_json" \'.data[$objectName] += $jsonString'}__func
{"data": {"obj_name": {"test": "json"}}}
split
使用 split 将字符串转换为数组
echo '"aa bb cc"' | jq 'split(" ")'
["aa","bb","cc"]
简单理解, 这里把 jq 理解为一款变成语言
第 2 3 行 定义 Shell 环境变量
第 5 6 行定义 jq 预处理变量 --arg 和 --argjson 相当于 jq 的变量类型
第 7 行, 也就是 jq 的代码了, 内部的 $jsonString 数据 jq 变量, 而不是 Shell 环境变量
http://ask.sov5.cn/q/ZjtdvZgsJ9
相关连接
如何删除jq输出中用于解析bash中的json文件的双引号? http://cn.voidcc.com/question/p-dqzfaxft-uw.html
jq&bash:从变量中生成JSON数组 https://oomake.com/question/6505361
https://stedolan.github.io/jq
