Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 基于键值过滤器的jq查询json键_Python_Json_Jq - Fatal编程技术网

Python 基于键值过滤器的jq查询json键

Python 基于键值过滤器的jq查询json键,python,json,jq,Python,Json,Jq,我有一个带key的json文件,值是一个带key-value对的json。我想根据内部键值对过滤和提取密钥。非常感谢您的帮助 json数据示例: { "key1": { "filterkey": "filtervalue", "key1": "value1" }, "key2": { "key1": "value1", "key2": "value2" } } 筛选器:“filterkey”:“filterval

我有一个带key的json文件,值是一个带key-value对的json。我想根据内部键值对过滤和提取密钥。非常感谢您的帮助

json数据示例:

{
    "key1": {
      "filterkey": "filtervalue",
      "key1": "value1"
    },
    "key2": {
      "key1": "value1",
      "key2": "value2"
    }
}
  • 筛选器:“filterkey”:“filtervalue”
  • 预期输出:“键1”

如果您的输入json是稳定的,并且您不需要控制任何边缘情况(任意深度、顶级类型不匹配,例如
“key1”:“nota dict”
),那么这就解决了您的问题:

ret = []
for k, v in js.items():
    if v.get("filterkey") == "filtervalue":
        ret.append(k)

运行代码段以查看输出:

var jsonObject={
“关键1”:{
“filterkey”:“filtervalue”,
“键1”:“值1”
},
“键2”:{
“键1”:“值1”,
“键2”:“值2”
}
};
函数filterKey(jsonObject、keySearch、valueSearch){
var结果=null;
for(jsonObject中的常量键){
if(jsonObject.hasOwnProperty(键)和
jsonObject[key][keySearch]!==未定义&&
jsonObject[key][keySearch]==valueSearch){
结果=键;
打破
}
}
返回结果;
}
警报(filterKey(jsonObject,'filterKey','filtervalue')
选择by filterkey,将对象转换为键值entires,然后获取第二个条目的键。输出为:

"key1"
在本例中,“key1”多次出现,但看起来您需要最外层的键名。如果是这种情况,那么使用
来搜索条目
是一种很好的方法,例如:

to_entries[]
| if .value.filterkey == "filtervalue" then .key else empty end
或相当于:

to_entries[]
| select(.value.filterkey == "filtervalue" )
| .key

您需要在json的任意深度工作还是只在顶层工作?你真的期望
“key1”
还是
[“key1”]
,因为可能存在多个键?@M.Rau json深度将始终相同。。只是会有更多的键,请通过避免重复“键1”来增强示例。
to_entries[]
| select(.value.filterkey == "filtervalue" )
| .key