是否可以从 python 中的变量中检索 JSON 路径?
Posted
技术标签:
【中文标题】是否可以从 python 中的变量中检索 JSON 路径?【英文标题】:Is it possible to retrieve a JSON path from a variable in python? 【发布时间】:2022-01-07 17:36:57 【问题描述】:我正在编写一个程序来查询一个响应 JSON 对象的 API。 JSON 对象是多级的,包含多个数组和键值对。我想从每个响应中检索相当多的项目,并且为每个函数多次输入每个路径被证明是耗时且混乱的。
我想将每个 JSON 路径存储在字典中以进行迭代。我正在尝试完成的一个简单示例:
api_response = api_request(query)
paths_to_data =
paths_to_data["author"] = "['Items'][0]['AttributeSets'][0]['Author']"
paths_to_data["actor"] = "['Items'][0]['AttributeSets'][0]['Actor']"
paths_to_data["format"] = "['Items'][0]['AttributeSets'][0]['Format']"
cleaned_response =
for a in paths_to_data.keys():
cleaned_response[a] = api_response.paths_to_data[a]
【问题讨论】:
【参考方案1】:由于您对路径进行硬编码,因此使用eval
应该是安全的。
cleaned_response[a] = eval(f"api_responsepaths_to_data[a]")
对于这样的事情,我通常会使用jq,除非它必须在 Python 中实现,在这种情况下你可以寻找一些 JSONPath 库。我对任何 JSONPath 库都不太熟悉,所以我不能推荐任何库,但我之前对 XML 使用过类似的东西。
【讨论】:
【参考方案2】:不要使用字符串。使用函数:
extractors =
extractors["author"] = lambda d: d['Items'][0]['AttributeSets'][0]['Author']
extractors["actor"] = lambda d: d['Items'][0]['AttributeSets'][0]['Actor']
extractors["format"] = lambda d: d['Items'][0]['AttributeSets'][0]['Format']
cleaned_data =
for item, extractor in paths_to_data:
cleaned_response[item] = extractor(api_response)
【讨论】:
以上是关于是否可以从 python 中的变量中检索 JSON 路径?的主要内容,如果未能解决你的问题,请参考以下文章
是否可以从脚本中检索 Javascript 变量以在 R 中使用它
是否可以从列出文件夹内容的 URL 中检索 JSON 格式的文件列表
无法使用 BigQuery 从 Google Datastore 检索 JSON 实体