【问题标题】:How to remove spaces in Json keys?如何删除 Json 键中的空格?
【发布时间】:2018-06-29 06:38:54
【问题描述】:

例子:

输入:

{"Contact Title": "Owner Name"}

预期输出:

{"ContactTitle": "Owner Name"}

【问题讨论】:

  • 你看过json包了吗:docs.python.org/3/library/json.html
  • ... 这是 JSON,即基于文本的序列化格式,还是 Python dict 对象?
  • @JacobIRR 也会影响值,而不仅仅是键
  • dict 对象的keys() 上使用replace(' ', ''),并使用json.loads() / json.dumps() 与JSON 相互转换

标签: python json key spaces


【解决方案1】:

使用 json object_hooks 的示例(支持嵌套字典):

In [1]: import json
   ...: 
   ...: example_dict = {'ke  y1': 'value1',
   ...:  'ke y2': 'value2',
   ...:  'k ey3': {'key3a': 'value3a'},
   ...:  'key 4': {'key 4a': {'key4a   a': {'key 4 4 4 44': 'value44 4   44'},
   ...:    'key4 ab': 'value  4ab',
   ...:    'key4ac': 'va lue4ac'},
   ...:   'k ey4b': 'valu  e4b'}}
   ...: 
   ...: def remove_spaces(obj):
   ...:     for key in obj.keys():
   ...:         new_key = key.replace(" ","")
   ...:         if new_key != key:
   ...:             obj[new_key] = obj[key]
   ...:             del obj[key]
   ...:     return obj
   ...: 
   ...: new_json = json.loads(json.dumps(example_dict), object_hook=remove_spaces) 
   ...: 
   ...: new_json
   ...: 
Out[1]: 
{u'key1': u'value1',
 u'key2': u'value2',
 u'key3': {u'key3a': u'value3a'},
 u'key4': {u'key4a': {u'key4aa': {u'key44444': u'value44 4   44'},
   u'key4ab': u'value  4ab',
   u'key4ac': u'va lue4ac'},
  u'key4b': u'valu  e4b'}}

还有另一种方法(只要不超过递归深度就更好了):

In [2]: def dict_key_unspacer(d):
    ...:     new = {}
    ...:     for k, v in d.iteritems():
    ...:         if isinstance(v, dict):
    ...:             v = print_dict(v)
    ...:         new[k.replace(' ', '')] = v
    ...:     return new
    ...: 
    ...: result_dict = dict_key_unspacer(example_dict)
    ...: 
    ...: result_dict
    ...: 
Out[2]: 
{'key1': 'value1',
 'key2': 'value2',
 'key3': {'key3a': 'value3a'},
 'key4': {'key4a': {'key4aa': {'key44444': 'value44 4   44'},
   'key4ab': 'value  4ab',
   'key4ac': 'va lue4ac'},
  'key4b': 'valu  e4b'}}

【讨论】:

  • 大家好,谢谢您的建议,我在一行中尝试了一些正则表达式,它工作正常,但我看到输出中的顺序发生了变化。
  • input = [{ "Id": "ALFKI", "Contact Name": "Maria Anders", "Contact Title": "销售代表", "City": "Berlin", "Slider ": 10 }, { "Id": "ANATR", "Contact Name": "Ana Trujillo", "Contact Title": "Owner", "City": "Mexico DF", "Slider": 5 }]
  • new_json = (re.sub(r'\s(?=\w+":)',"",str(json.dumps(input))))
  • [ { "ContactName": "Maria Anders", "ContactTitle": "销售代表", "Id": "ALFKI", "Slider": 10, "City": "Berlin" } , { "ContactName": "Ana Trujillo", "ContactTitle": "Owner", "Id": "ANATR", "Slider": 5, "City": "Mexico DF" } ]
【解决方案2】:

感谢您的建议,我在一行中尝试了一些正则表达式,效果很好,但我看到输出中的顺序发生了变化。

输入 = [{ “Id”:“ALFKI”, “联系人姓名”:“玛丽亚安德斯”, “联系人职务”:“销售代表”, “城市”:“柏林”, “滑块”:10 }, { “ID”:“ANATR”, “联系人姓名”:“安娜·特鲁希略”, “联系人姓名”:“所有者”, “城市”:“墨西哥 D.F.”, “滑块”:5 }]

new_json = (re.sub(r'\s(?=\w+":)',"",str(json.dumps(input))))

输出 = [ { "ContactName": "玛丽亚安德斯", "ContactTitle": "销售代表", “Id”:“ALFKI”, “滑块”:10, “城市”:“柏林” }, { “联系人姓名”:“安娜·特鲁希略”, "ContactTitle": "所有者", “ID”:“ANATR”, “滑块”:5, “城市”:“墨西哥 D.F.” } ]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-10-27
    • 1970-01-01
    • 1970-01-01
    • 2019-07-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多