如何在 Python 中重命名嵌套 JSON 对象的键

DX123

执行 Logstash 聚合后,我有这个 JSON 对象响应。

 "aggregations": {
    "range": {
      "buckets": [
        {
          "key": "2018-01-01T00:00:00.000Z-2018-01-31T00:00:00.000Z",
          "from_as_string": "2018-01-01T00:00:00.000Z",
          "to_as_string": "2018-01-31T00:00:00.000Z",
          "doc_count": 13000,
          "by ip": {
            "doc_count_error_upper_bound": 10,
            "sum_other_doc_count": 10300,
            "buckets": [
              {
                "key": "192.168.0.1",
                "doc_count": 20 <---
                 .
                 .
                 . (Sub-buckets for other fields containing doc_count as 
                    well)
              },
              {
                "key": "1.2.3.4",
                "doc_count": 50 <---
              }
            }
          ]
        }
      }
    ]
  }
}

我想将“doc_count”键重命名为“唯一事件数”。但是,我只希望这仅用于 IP 地址存储桶的 doc_count,而不是任何其他存储桶字段。

这是我找到的解决方案之一,但它为每个字段存储桶重命名了 doc_count。

def rename_doc_count(obj):
    for key in obj.keys():
        new_key = key.replace("doc_count","Number of unique events")
        if new_key != key:
            obj[new_key] = obj[key]
            del obj[key]
    return obj

new_json = json.loads(jres, object_hook=rename_doc_count)

任何人都有适合我的情况的解决方案?谢谢!

巴马

在加载 JSON 后执行此操作,这样您就可以仅在所需元素上调用该函数。

obj = json.loads(jres);
for bucket in obj["aggregations"]["range"]["buckets"]:
    for bucket2 in bucket["by ip"]["buckets"]:
        rename_doc_count(bucket2)

并且不需要循环rename_doc_count,只需获取特定的字典元素。

def rename_doc_count(obj):
    if "doc_count" in obj:
        obj["Number of unique events"] = obj["doc_count"]
        del obj["doc_count"]

您提到可以有也应该重命名的子存储桶。您可以通过rename_doc_count递归调用自身来做到这一点但是你没有显示它们在结构中的位置,所以我不知道它应该是什么样子。但它类似于json.loads().

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何在Python中重命名virtualenv?

如何在python中读取json对象

如何重命名数组中的对象键

如何在Python中按多个键对对象排序?

如何在Retrofit2 Android中动态重命名JSON响应的键

如何在Presto中的嵌套json数组对象中提取键?

如何在JSON模式中约束对象的键的最大长度

如何在春季启动中重命名json对象(变量)的名称

如何在Python中创建JSON对象

jq:如何在带有数组的嵌套json树中添加对象,键/值

Node.js,如何在嵌套的json对象中获取值,中间键未知

如何重命名数组中对象的键

API返回json aray对象,其中包含点,空格和%的键。如何重命名或从数组中删除键?

如何在Javascript对象中引用JSON设置为键

如何在键更改的地方访问React中的JSON对象

如何使用ElasticsearchSinkConnector重命名/转换json对象中的嵌套字段

如何检查python中是否存在JSON键/对象

PHP如何在JSON对象中回显特定键?

如何在 Microsoft Flow 中获取 JSON 中的对象键

如何在 Python 中迭代 json 对象?

使用python重命名json键属性

如何在 JSON 中查找对象键的索引

如何在 ReactJS 中访问 JSON 对象键和值

我如何在 Php 值中循环 Json 对象键

如何在 React 中映射嵌套的 JSON 对象键?

重命名嵌套的对象键

如何在vuejs的json对象中查找嵌套键

在python中重命名递增的JSON对象

如何从 JSON 响应的嵌套对象中的特定键创建列表?