Python 编辑/重命名 .json 中的键名

新手上路,请多包涵

有没有办法更改密钥名称?我需要更改名称 "Class123" 就像在示例中一样。我可以更改值,但我不知道如何更改键名。

示例.json:

 {
    "Class123": "classvalue",
    "name1": {
        "name2": {
            "name3": {
                "Y": 158.8,
                "X": 201.46
            },
            "name4": {
                "Y": 159.68,
                "X": 200.32
            }
        }
    }
}

像这样开始:

 with open('my.json') as json1:
    data = json.load(json1)
    for item in data:

原文由 Kaira Asia 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 795
2 个回答

无法“更改”键名。您可以做的最好的事情是使用 pop 将值复制到另一个键:

 d = {'old_name': 1}
d['new_name'] = d.pop('old_name')
print(d)
# {'new_name': 1}

原文由 DeepSpace 发布,翻译遵循 CC BY-SA 3.0 许可协议

我想在这里添加我的方法,因为它将单数命名扩展为使用键字典。

假设您有一个示例 JSON 列表 ga_list 并且您想使用字典键更改所有名称 names_key

 names_key = { 'ga:date'            : 'date' ,
              'ga:bounceRate'      : 'bounce' ,
              'ga:newUsers'        : 'new_users',
              'ga:pageviews'       : 'page_views',
              'ga:sessions'        : 'sessions',
              'ga:uniquePageviews' : 'unique_page_views',
              'ga:users'           : 'users'
              }

ga_list = [{
      'ga:bounceRate': 34.478408,
      'ga:date': '20151203',
      'ga:newUsers': 1679,
      'ga:pageviews': 550,
      'ga:sessions': 307,
      'ga:uniquePageviews': 467,
      'ga:users': 256},
    {'ga:bounceRate': 21.28534,
      'ga:date': '20151204',
      'ga:newUsers': 164,
      'ga:pageviews': 594,
      'ga:sessions': 305,
      'ga:uniquePageviews': 476,
      'ga:users': 252},
    {'ga:bounceRate': 13.8372346,
      'ga:date': '20151205',
      'ga:newUsers': 152,
      'ga:pageviews': 826,
      'ga:sessions': 330,
      'ga:uniquePageviews': 241,
      'ga:users': 200}]

for row in ga_list:
  for k, v in names_key.items():
    for old_name in row:
      if k == old_name:
        row[v] = row.pop(old_name)

print(ga_list)

>>>
[{'bounce': 34.47842608,
  'date': '20151203',
  'new_users': 1679,
  'page_views': 550,
  'sessions': 307,
  'unique_page_views': 467,
  'users': 256},
 {'bounce': 21.28534,
  'date': '20151204',
  'new_users': 164,
  'page_views': 594,
  ....
  'unique_page_views': 241,
  'users': 200}]

在那里,所有旧名称都根据密钥重命名。

希望这对某人有帮助。

原文由 Mike G 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题