linux下编写shell脚本时使用jq命令实现将json对象追加到数组中

- linux系统管理

编写shell脚本的时候,打算将脚本的输出定义为 json 格式,好方便扩展功能时其他脚本能方便读取使用。主要就是 for 循环将处理好后的内容定义为 json 对象,然后追加到 json 数组里面,最后直接输出完整数组。


验证jq命令将值添加到数组

[root@imzcy ~]# json_data=[]
[root@imzcy ~]# json_data=$( echo '[{"name":"zhangsan","age":18}]' |jq '. += '"$json_data"' ')
[root@imzcy ~]# echo $json_data
[ { "name": "zhangsan", "age": 18 } ]
[root@imzcy ~]#
[root@imzcy ~]# json_data=$( echo '[{"name":"lisi","age":19}]' |jq '. += '"$json_data"' ')
[root@imzcy ~]# echo $json_data
[ { "name": "lisi", "age": 19 }, { "name": "zhangsan", "age": 18 } ]
[root@imzcy ~]#




在 shell 脚本中验证

[root@imzcy ~]# cat t2.sh
#!/bin/bash

user_list="zhangsan 18
lisi 19"

output_info=[]
while read line; do

    eval $(echo "$line" |awk '{printf("name=%s; age=%s",$1,$2)}' )
    json_data='
    {
        "nowTime":"'$(date '+%Y-%m-%d %H:%M:%S')'",
        "name":"'${name}'",
        "age": '${age}'
    }'

   #echo $json_data
   output_info=$( echo '[ '${json_data}' ]' |jq '. += '"$output_info"' ' )

done <<< $(echo $user_list)


echo $output_info
[root@imzcy ~]#
[root@imzcy ~]# sh t2.sh
[ { "nowTime": "2024-02-05 23:23:17", "name": "zhangsan", "age": 18 } ]
[root@imzcy ~]#
[root@imzcy ~]# sh t2.sh |jq .
[
  {
    "nowTime": "2024-02-05 23:23:51",
    "name": "zhangsan",
    "age": 18
  }
]
[root@imzcy ~]#