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

use*_*651 10 bash json jq

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

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

temp='{ "1": { "my_name": "one" }, "2": { "my_name": "two" } }'
Run Code Online (Sandbox Code Playgroud)

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

我尝试过这样的事情

echo $temp | jq '.1' //out put 0.1
I was assuming to get { "my_name": "one" } 
Run Code Online (Sandbox Code Playgroud)

并且类似于获取my_name值我做了

echo $temp | jq '.1.my_name' // Its output is giving me error
Run Code Online (Sandbox Code Playgroud)

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

谢谢

tri*_*eee 10

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

echo "$temp" | jq '.["1"]["my_name"]'
Run Code Online (Sandbox Code Playgroud)

echo "$temp" | jq '.["1"]'
Run Code Online (Sandbox Code Playgroud)

得到包含的词典.

有了足够新的jq(我认为> = 1.4)你也可以说

echo "$temp" | jq '."1".my_name'
Run Code Online (Sandbox Code Playgroud)


Jef*_*ado 5

每当您尝试引用不是有效标识符的密钥时,都必须引用该密钥。有关更多详细信息,请参见手册

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

."1"
Run Code Online (Sandbox Code Playgroud)

对于有关如何获取my_name值的其他问题,可以执行以下操作:

to_entries | map(.value.my_name)
Run Code Online (Sandbox Code Playgroud)