json - jq解析获取值

标签 json linux jq

<分区>

我需要从 json 文件中获取一些值。我需要得到一个数组 (dimmer1, dimmer2)

有人知道吗?

{
 "devices": {
    "dimmer1": {
      "protocol": ["kaku_dimmer"],
      "state": "off",
      "dimlevel": 1
    },
    "dimmer2": {
      "protocol": ["kaku_dimmer"],
      "state": "off",
      "dimlevel": 1
    }
}

最佳答案

编辑:在评论中澄清后,要检索其 key 以“dimmer”开头的设备的状态,请使用

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"},分解后的对象被展开成一个这样的对象数组(每个属性一个)
  • to_entries[] 解包该数组,以便通过管道传输它
  • select(.key | startswith("dimmer")),选择key以dimmer开头的设备
  • .value = .value.state 重构描述设备的键值对,以便仅用其 state 属性替换值
  • [ all that ] 将所有这些组成一个 JSON 数组,并且
  • [所有] | from_entries 将键值对数组转换回 JSON 对象。

旧答案(缩短),现在已过时但可能有兴趣:

检索数组中devices 的属性键:

jq '.devices | keys' filename.json

要检索值(也在数组中),

jq '[ .devices[] ]' filename.json

我不完全确定你指的是哪两个。

关于json - jq解析获取值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29389010/

相关文章:

java - 新文件未在 renameTo() 上被调用

arrays - 如何在shell脚本中获取JSON中向量的大小?

chdir() 可以接受相对路径吗?

iteration - 使用 jq for JSON 为数组中的每个元素输出对象中的特定键值

json - 如何使用 jq 合并多个文件中的 JSON 记录

php - 如何使用 JSONP 下载客户端 javascript 对象?

json - 访问jquery模板中的json文件

c# - POST json 字典

javascript - jquery中从json数组中分割json数据

linux - 正确的用户输入 - x86 Linux 程序集