首页 > 解决方案 > json 元素值替换为 shell 脚本中的变量

问题描述

我有一个带有主机列表的模板 json 文件作为示例。相同的替换为由 shell 脚本生成的动态值。

示例 rds.json

{
    "lob": "coaching",
    "function": "badminton",
    "hosts": [
        "node1.rds.sports.com",
        "node2.rds.sports.com",
        "node3.rds.sports.com"
        ],
    "adminserver": "node1.rds.sports.com",
    "user_name": "coach",
    "sudo_type": "sudo",
    "group_name": "admin"
}

echo $myHosts

"host1.rds.sports.com", "host2.rds.sports.com", "host3.rds.sports.com", "host4.rds.sports.com", "host5.rds.sports.com", "host6.rds.sports.com", "host7.rds.sports.com", "host8.rds.sports.com"

$myHosts 的值应该在 hosts 元素键中被替换。

期望的输出:

{
    "lob": "coaching",
    "function": "badminton",
    "hosts": [
        "host1.rds.sports.com", 
        "host2.rds.sports.com", 
        "host3.rds.sports.com", 
        "host4.rds.sports.com", 
        "host5.rds.sports.com", 
        "host6.rds.sports.com", 
        "host7.rds.sports.com", 
        "host8.rds.sports.com"
    ],
    "adminserver": "hosts1.rds.sports.com",
    "user_name": "coach",
    "sudo_type": "sudo",
    "group_name": "admin"
}

标签: jsonshelljq

解决方案


I'm going to assume the contents of myHosts is a valid JSON array body.

jq --argjson hosts "[$myHosts]" '.hosts = $hosts | .adminserver = .hosts[0]' rds.json

jqplay


推荐阅读