如何在python中提取嵌套的json名称并转换为点符号字符串列表?
我需要从elasticsearch中提取数据,进行一些清理/咀嚼并导出为table/rds 要做到这一点,我需要从elasticsearch中提取一长串变量名。这个变量列表对于pull是必需的,但问题是并非所有字段都可以在给定的pull中表示,这意味着我需要在事实之后添加字段。我可以使用相同变量名列表的模式(嵌套json格式)来实现这一点 为了尝试并[稍微]验证这项工作,理想情况下,我只希望在一个位置维护列表/模式,并从列表转换为模式(反之亦然) 在python中有没有实现这一点的方法?请参见下面的输入和所需输出示例 模式的一小部分:如何在python中提取嵌套的json名称并转换为点符号字符串列表?,python,json,elasticsearch,Python,Json,elasticsearch,我需要从elasticsearch中提取数据,进行一些清理/咀嚼并导出为table/rds 要做到这一点,我需要从elasticsearch中提取一长串变量名。这个变量列表对于pull是必需的,但问题是并非所有字段都可以在给定的pull中表示,这意味着我需要在事实之后添加字段。我可以使用相同变量名列表的模式(嵌套json格式)来实现这一点 为了尝试并[稍微]验证这项工作,理想情况下,我只希望在一个位置维护列表/模式,并从列表转换为模式(反之亦然) 在python中有没有实现这一点的方法?请参见下
{
"_source": {
"filters": {"group": {"filter_value": 0}},
"user": {
"email": "",
"uid": ""
},
"status": {
"date": "",
"active": True
}
}
}
所需的字符串列表输出:
[
"_source.filters.group.filter_value",
"_source.user.email",
"_source.user.uid",
"_source.status.date",
"_source.status.active"
]
我相信schema->list可能比list->schema更容易转换,不过如果更简单的话,我很高兴它是另一种方式(尽管需要确保模式变量具有正确的类型,即str、bool、float)
我已经探索了以下接近的答案,但我很难理解,因为python中似乎没有一个答案:
- 其中
d
是您的json字典
def full_search(d):
arr = []
def dfs(d, curr):
if not type(d) == dict or curr[-1] not in d or type(d[curr[-1]]) != dict:
arr.append(curr)
return
for key in d[curr[-1]].keys():
dfs(d[curr[-1]], curr + [key])
for key in d.keys():
dfs(d, [key])
return ['.'.join(x) for x in arr]
如果d
为json格式,请使用
import json
res = full_search(json.loads(d))