json - 如何使用 jq 中的流选项从 JSON 文件中检索键和值

标签 json stream jq

我有一个结构如下的 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/

相关文章:

ios - 获取 JSON 并尝试解析它时出错 [iOS]

java - 关闭 BufferedReader 而不关闭包装流

C++从istream读取int,检测溢出

c++ - 如何使用 pstreams 获得完整的流输出?

json - 过滤掉包含特定键/值对的子数组项

json - 处理非常大的输入文件而无需slurp

php - 拉维和 PHP : Return special formatted JSON

java - 如何在redis中使用where条件更新json的多个值?

python - Pandas OHLCV 转 JSON 格式

json - 使用 JQ 处理嵌套对象映射中的空值