我有一个结构如下的 json 文件:
{
"A": [{
"B": {
"C": [{
"D": {
"applicationNumberText": {
"value": "15570075",
"electronicText": "15570075"
},
"date": "2018-10-01",
"app": "Utility"
}
}]
}
}]
}
现在我想检索 electronicText
值。一种方法是使用如下索引
jq --stream 'select(.[0][1] == "A" and .[0][2] == "B" and .[0][3] == "C") | .[1]'
但在某些情况下结构可能会有所不同,所以我想通过键值而不是索引来引用。我尝试了以下方法,但它不起作用
cat file.json | jq --stream 'select(.A|.[]. B. C|.[]. D.applicationNumberText)'
所以我想在不使用索引的情况下检索 electronicText
键。
注意
:我想对大型 JSON 文件使用 stream
选项。
最佳答案
如果数组的索引是固定的,你可以使用这个过滤器:
jq '.A[0].B.C[0].D.applicationNumberText.electronicText' file
要提取所有 electronicText
字段,您可以使用:
jq '.A[].B.C[].D.applicationNumberText.electronicText' file
如果你想使用 jq stream fashion(虽然不清楚为什么),你可以使用这个:
jq --stream 'select(.[0]|contains(["electronicText"]))|.[1]//empty'
这将在字符串 electronicText
的键路径中查找,如果找到,则获取其关联值。 //empty
是过滤掉没有值的path数组。
关于json - 如何使用 jq 中的流选项从 JSON 文件中检索键和值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53256388/