如何使用变量中的jq创建json主体,同时保留类型



我正在创建一个简单的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}' )

最新更新