我正在尝试从 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
提供了两个函数来提供数组中的这些键:keys
和 keys_unsorted
。它们的区别:后者按照输入文档中出现的顺序返回所有键,而前者还对该数组进行排序。无论哪种方式,要获得所需的输出,请使用 .[]
迭代该数组。您可以将函数和迭代器组合起来:
jq -r 'keys_unsorted[]' items.json
# or
jq -r 'keys[]' items.json