需要帮助在数组中创建对象
Need help to create objects inside array
jq 像这样查询,
jq -n --arg cname "" --arg dns "" '
{
"extra_vars": {
"oper_tasks": [ "records" ],
"zone_info": [
{
"zone": "exmple.com",
"records": [
{
"name": $cname,
"type": "CNAME",
"value": $dns,
"ttl": 3600
}
]
}
]
}
}
'
上面的jq cn产生的结果是这样的,cname和dns在我们作为脚本执行的时候可以填入参数
"extra_vars": {
"oper_tasks": [
"records"
],
"zone_info": [
{
"zone": "exmple.com",
"records": [
{
"name": "",
"type": "CNAME",
"value": "",
"ttl": 3600
}
]
}
]
}
}
我们如何从输入文件创建多个对象,如下所示。类似于我们在 for 循环中的做法。
"extra_vars": {
"oper_tasks": [
"records"
],
"zone_info": [
{
"zone": "exmple.com",
"records": [
{
"name": <cname1 from input file>,
"type": "CNAME",
"value": "",
"ttl": 3600
},
{
"name": <cname2 from input file>,
"type": "CNAME",
"value": "",
"ttl": 3600
}
]
}
]
}
假设您有一个文件 cnames.txt
,其中每一行都包含一个 CNAME 域,后跟它的值:
foo.example.com google.com
bar.example.com whosebug.com
让我们创建该文件:
cat <<EOF > cnames.txt
foo.example.com google.com
bar.example.com whosebug.com
EOF
您可以使用 jq Manual 中描述的 --slurpfile
将一个 jq
“嵌套”到另一个中。下面的命令应该做你想做的:
cat cnames.txt | xargs -n2 jq -n '{
"name": $ARGS.positional[0],
"type": "CNAME",
"value": $ARGS.positional[1],
"ttl": 3600
}' --args | jq -n --slurpfile records /dev/stdin '
{
"extra_vars": {
"oper_tasks": [ "records" ],
"zone_info": [
{
"zone": "example.com",
"records": $records
}
]
}
}
'
哪个returns:
{
"extra_vars": {
"oper_tasks": [
"records"
],
"zone_info": [
{
"zone": "example.com",
"records": [
{
"name": "foo.example.com",
"type": "CNAME",
"value": "google.com",
"ttl": 3600
},
{
"name": "bar.example.com",
"type": "CNAME",
"value": "whosebug.com",
"ttl": 3600
}
]
}
]
}
}
jq 像这样查询,
jq -n --arg cname "" --arg dns "" '
{
"extra_vars": {
"oper_tasks": [ "records" ],
"zone_info": [
{
"zone": "exmple.com",
"records": [
{
"name": $cname,
"type": "CNAME",
"value": $dns,
"ttl": 3600
}
]
}
]
}
}
'
上面的jq cn产生的结果是这样的,cname和dns在我们作为脚本执行的时候可以填入参数
"extra_vars": {
"oper_tasks": [
"records"
],
"zone_info": [
{
"zone": "exmple.com",
"records": [
{
"name": "",
"type": "CNAME",
"value": "",
"ttl": 3600
}
]
}
]
}
}
我们如何从输入文件创建多个对象,如下所示。类似于我们在 for 循环中的做法。
"extra_vars": {
"oper_tasks": [
"records"
],
"zone_info": [
{
"zone": "exmple.com",
"records": [
{
"name": <cname1 from input file>,
"type": "CNAME",
"value": "",
"ttl": 3600
},
{
"name": <cname2 from input file>,
"type": "CNAME",
"value": "",
"ttl": 3600
}
]
}
]
}
假设您有一个文件 cnames.txt
,其中每一行都包含一个 CNAME 域,后跟它的值:
foo.example.com google.com
bar.example.com whosebug.com
让我们创建该文件:
cat <<EOF > cnames.txt
foo.example.com google.com
bar.example.com whosebug.com
EOF
您可以使用 jq Manual 中描述的 --slurpfile
将一个 jq
“嵌套”到另一个中。下面的命令应该做你想做的:
cat cnames.txt | xargs -n2 jq -n '{
"name": $ARGS.positional[0],
"type": "CNAME",
"value": $ARGS.positional[1],
"ttl": 3600
}' --args | jq -n --slurpfile records /dev/stdin '
{
"extra_vars": {
"oper_tasks": [ "records" ],
"zone_info": [
{
"zone": "example.com",
"records": $records
}
]
}
}
'
哪个returns:
{
"extra_vars": {
"oper_tasks": [
"records"
],
"zone_info": [
{
"zone": "example.com",
"records": [
{
"name": "foo.example.com",
"type": "CNAME",
"value": "google.com",
"ttl": 3600
},
{
"name": "bar.example.com",
"type": "CNAME",
"value": "whosebug.com",
"ttl": 3600
}
]
}
]
}
}