[英]How to rename a deeply nested key in list of dictionaries (Python 3)?
[英]How to rename key for nested JSON object in Python
執行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()
之后的循環。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.