我有以下json文件:
{
"FOO": {
"name": "Donald",
"location": "Stockholm"
},
"BAR": {
"name": "Walt",
"location": "Stockholm"
},
"BAZ": {
"name": "Jack",
"location": "Whereever"
}
}
Run Code Online (Sandbox Code Playgroud)
我正在使用jq并希望得到'location'为'Stockholm'的对象的"名称"元素.
我知道我可以得到所有的名字
cat json | jq .[] | jq ."name"
"Jack"
"Walt"
"Donald"
Run Code Online (Sandbox Code Playgroud)
但考虑到子键的值(这里"location" : "Stockholm"),我无法弄清楚如何只打印某些对象.
在一个非常大的嵌套json结构中,我试图找到以键结尾的所有路径.
例如:
{
"A": {
"A1": {
"foo": {
"_": "_"
}
},
"A2": {
"_": "_"
}
},
"B": {
"B1": {}
},
"foo": {
"_": "_"
}
}
Run Code Online (Sandbox Code Playgroud)
将按以下方式打印:["A","A1","foo"],["foo"]
不幸的是,我不知道键的嵌套级别会出现什么级别,因此我无法通过简单的选择来解决问题.我已经接近了jq '[paths] | .[] | select(contains(["foo"]))',但输出包含任何包含foo的树的所有排列.输出:["A", "A1", "foo"]["A", "A1", "foo", "_"]["foo"][ "foo", "_"]
如果我可以保留原始数据结构格式但只是过滤掉所有不包含密钥的路径(在这种情况下,"foo"下的子树不需要隐藏),则可以获得奖励积分.
我有一个像这样的JSON:
{
"A": { "error": null },
"B": { "C": {"error": "error string"}},
"C": { "D": {"error": null}},
"D": { "error": "err str"}
}
Run Code Online (Sandbox Code Playgroud)
结束我想找到非空的错误键的所有值.
对于我的例子,它应该返回
"error string"
"err str"
Run Code Online (Sandbox Code Playgroud)
我该怎么做?有没有可能与jq?