jq:如何提取没有属性名称的值

问题描述 投票:0回答:1

我正在尝试从 json 文件中获取值。但是,我的文件有一个没有属性名称的值。

json 文件名为 items.json,如下所示:

{
  "AQ_01_Availability": {
    "class": "org.openhab.core.items.ManagedItemProvider$PersistedItem",
    "value": {
      "groupNames": [
        "gAirQuality_01"
      ],
      "itemType": "Switch",
      "tags": [],
      "label": "Availability"
    }
  },
  "AQ_01_CO2": {
    "class": "org.openhab.core.items.ManagedItemProvider$PersistedItem",
    "value": {
      "groupNames": [
        "gAirQuality_01"
      ],
      "itemType": "Number",
      "tags": [],
      "label": "CO2"
    }
  },
  "AQ_01_Formaldehyde": {
    "class": "org.openhab.core.items.ManagedItemProvider$PersistedItem",
    "value": {
      "groupNames": [
        "gAirQuality_01"
      ],
      "itemType": "Number",
      "tags": [],
      "label": "Formaldehyde"
    }
  },
  "AQ_01_Humidity": {
    "class": "org.openhab.core.items.ManagedItemProvider$PersistedItem",
    "value": {
      "groupNames": [
        "gAirQuality_01"
      ],
      "itemType": "Number",
      "tags": [],
      "label": "Humidity",
      "category": "humidity"
    }
  }
}

我以为

jq .items[0] items.json
会返回每个对象的名称;但它返回
null

我想要的结果是:

AQ_01_Availability
AQ_01_CO2
AQ_01_Formaldehyde
AQ_01_Humidity

我没用过jq,对json也不太熟悉。我的假设是一个结构良好的文件,认为每个对象都以

item_name
开头。

json jq
1个回答
0
投票

JSON 具有树状层次结构。在这种情况下,顶层(“根”)是一个对象。对象是一组键值对。您想要提取该顶级对象的所有键。

jq
提供了两个函数来提供数组中的这些键:
keys
keys_unsorted
。它们的区别:后者按照输入文档中出现的顺序返回所有键,而前者还对该数组进行排序。无论哪种方式,要获得所需的输出,请使用
.[]
迭代该数组。您可以将函数和迭代器组合起来:

jq -r 'keys_unsorted[]' items.json
# or
jq -r 'keys[]' items.json
© www.soinside.com 2019 - 2024. All rights reserved.