Jsonファイルからいくつかの値を取得する必要があります。配列を取得する必要があります(dimmer1、dimmer2)
誰かアイデアは?
{
"devices": {
"dimmer1": {
"protocol": ["kaku_dimmer"],
"state": "off",
"dimlevel": 1
},
"dimmer2": {
"protocol": ["kaku_dimmer"],
"state": "off",
"dimlevel": 1
}
}
編集:コメントを明確にした後、キーが「調光器」で始まるデバイスの状態を取得するには、次を使用します
_jq '[ .devices | to_entries[] | select(.key | startswith("dimmer")) | .value = .value.state ] | from_entries' filename.json
_
出力:
_{
"dimmer1": "off",
"dimmer2": "off"
}
_
これは次のように機能します。
.devices
_は、JSONオブジェクトの_.devices
_属性を選択しますto_entries
_は、オブジェクトをその属性(デバイス)を説明するキーと値のペアの配列に分解します。つまり、属性_"foo": "bar"
_がオブジェクト_{ "key": "foo", "value": "bar" }
_になり、分解されたオブジェクトはそのようなオブジェクトの配列に展開されます(属性ごとに1つ)to_entries[]
_をパイプで通すために、その配列をアンパックしますselect(.key | startswith("dimmer"))
、キーがdimmer
で始まるデバイスを選択します.value = .value.state
_は、デバイスを説明するキーと値のペアを再構築して、値がそのstate
属性だけで置き換えられるようにします[ all that ]
_は、これらすべてのJSON配列を作成し、[ all that ] | from_entries
_は、キーと値のペアの配列をJSONオブジェクトに変換します。配列内のdevices
の属性のキーを取得するには:
_jq '.devices | keys' filename.json
_
値を(配列でも)取得するには、
_jq '[ .devices[] ]' filename.json
_
あなたがそれらの2つのうちのどちらを意味するのか、私には完全にはわかりませんでした。