当键是数字字符串时,使用jq从json获取数据

时间:2015-03-03 23:52:16

标签: json bash jq

我是jq的新手,在解析我的json时面临一个问题

我有一个json存储在像这样的变量

temp='{ "1": { "my_name": "one" }, "2": { "my_name": "two" } }'

现在我需要为其他条目获取my_name的值

我尝试过这样的事情

echo $temp | jq '.1' //out put 0.1
I was assuming to get { "my_name": "one" } 

同样获得my_name值我做了

echo $temp | jq '.1.my_name' // Its output is giving me error

任何人都可以帮助确定我的语法有什么问题,我该如何纠正它。

2 个答案:

答案 0 :(得分:7)

只是数字被解释为浮点数。您需要在明确是键字符串的上下文中使用它。

echo "$temp" | jq '.["1"]["my_name"]'

echo "$temp" | jq '.["1"]'

获取包含字典。

如果有足够新的jq(我认为> = 1.4),您也可以说

echo "$temp" | jq '."1".my_name'

答案 1 :(得分:3)

每当您尝试引用不是有效标识符的密钥时,您都必须引用它。有关详细信息,请参阅manual

要选择键1下的项目,请执行以下操作:

."1"

关于如何获取my_name值的其他问题,您可以这样做:

to_entries | map(.value.my_name)