elasticsearch,Python,Json,elasticsearch" /> elasticsearch,Python,Json,elasticsearch" />

如何在python中提取嵌套的json名称并转换为点符号字符串列表?

如何在python中提取嵌套的json名称并转换为点符号字符串列表?,python,json,elasticsearch,Python,Json,elasticsearch,我需要从elasticsearch中提取数据,进行一些清理/咀嚼并导出为table/rds 要做到这一点,我需要从elasticsearch中提取一长串变量名。这个变量列表对于pull是必需的,但问题是并非所有字段都可以在给定的pull中表示,这意味着我需要在事实之后添加字段。我可以使用相同变量名列表的模式(嵌套json格式)来实现这一点 为了尝试并[稍微]验证这项工作,理想情况下,我只希望在一个位置维护列表/模式,并从列表转换为模式(反之亦然) 在python中有没有实现这一点的方法?请参见下

我需要从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))