[英]Selecting from nested array in JSON using jq gives empty result
我一直在为此绞尽脑汁,因为从表面上看,我使用的 jq 语句应该会产生预期的结果,但是使用 jqplay 之类的工具进行测试却给了我一个空白的结果......
这是我正在使用的 JSON:
{
"DBInventory":
{
"InventoryID": "ABSCBD",
"Inventory":[
{
"Sys1":
{
"folder":[
{
"Scripts":
{
"files": [
"FileName1O",
"FileName2O"
]
}
},
{
"Schemas":
{
"files": [
"FileName1S",
"FileName2S"
]
}
},
{
"StoredProcedures":
{
"files": [
"FileName1SP",
"FileName2SP",
"FileName3SP"
]
}
},
{
"Tables":
{
"files": [
"FileName1T",
"FileName2T"
]
}
}
]
}
},
{
"Sys2":
{
"folder":[
{
"MaintScripts":
{
"files": [
"FileName1",
"FileName2"
]
}
},
{
"Schemas":
{
"files": [
"FileName1",
"FileName2"
]
}
},
{
"StoredProcedures":
{
"files": [
"FileName1",
"FileName2"
]
}
},
{
"Tables":
{
"files": [
"FileName1",
"FileName2"
]
}
},
{
"ExternalTables":
{
"files": [
"FileName1",
"FileName2"
]
}
},
{
"Scripts":
{
"files": [
"FileName1",
"FileName2"
]
}
},
{
"Views":
{
"files": [
"FileName1v",
"FileName2v"
]
}
}
]
}
}
]
}
}
我正在尝试 select 和 object 只返回它下面的数组中的文件名(比如我只想要 'Sys1' 的 'Schemas' 中的文件)。 所需的 output 将是:
["Filename1S","Filename2S"]
从本节开始:
Inventory > Sys1 > folder > Schemas
我一直在调用的 jq 语句是:
.DBInventory.Inventory[0][] | select(any(.folder[]; .Key == "Schemas")) | .files[]
任何帮助将不胜感激。 我想我已经接近了,但是整个空白 output 让我陷入了困境。
您在这里根本不需要select()
。 考虑:
jq '.DBInventory.Inventory[0][].folder[].Schemas?.files // empty'
JSON 数据不是完全规则的,因此您可以更精确地指定感兴趣的路径,或者在查询中添加一些“救助”(例如// empty
或?
),例如:
.DBInventory.Inventory[].Sys1 // empty
| (.folder[].Schemas // empty).files
或者简单地说:
try (.DBInventory.Inventory[].Sys1.folder[].Schemas.files) // empty
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.