14

私は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

私の構文のどこが間違っているのか、どうすれば修正できるのかを特定するのを手伝ってくれませんか。

4

2 に答える 2

13

数値だけが float として解釈されます。明確にキー文字列であるコンテキストで使用する必要があります。

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

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

含む辞書を取得します。

十分に新しいjq(>= 1.4だと思います)と言うことができます

echo "$temp" | jq '."1".my_name'
于 2015-03-04T05:14:55.027 に答える
5

Whenever you are trying to reference a key that is not a valid identifier, you have to quote it. See the manual for more details.

To select the item under the key 1, you'd do this:

."1"

For your other question on how to obtain the my_name values, you could do this:

to_entries | map(.value.my_name)
于 2015-03-04T06:12:40.880 に答える