我正在创建一个简单的bash脚本,并试图使用jq 构建一个json主体
name='"john"'
objects='[]'
count='1'
data=$( jq -n
--arg na $name
--arg ob $objects
--arg ct $count
'{name: $na, objects: $ob, count: $ct}' )
当我回显数据时,我得到{ "name": ""john"", "objects": "[]", "count": "1" }
但是,对象和计数值是字符串。相反,我想要{ "name": "john", "objects": [], "count": 1 }
如果确定所有变量都包含有效的JSON表达式,则可以使用--argjson
而不是--arg
:
#!/usr/bin/env bash
name='"john"'
objects='[]'
count='1'
# Note quoting the variables to prevent issues with unwanted expansion
data=$( jq -n
--argjson na "$name"
--argjson ob "$objects"
--argjson ct "$count"
'{name: $na, objects: $ob, count: $ct}' )
printf "%sn" "$data"
输出
{
"name": "john",
"objects": [],
"count": 1
}
或者,您可以在jq
表达式中使用fromjson
:
data=$( jq -n
--arg na "$name"
--arg ob "$objects"
--arg ct "$count"
'{name: $na|fromjson, objects: $ob|fromjson, count: $ct|fromjson}' )