首页 > 解决方案 > 将元组作为键的字典转换为 JSON

问题描述

我想将字典转换为 JSON 对象,但我的键是一个元组,因此当我这样做时遇到了问题:

import json

d = {(300, 341): 4, (342, 426): 5}
json.dumps(d)

错误:

TypeError:键必须是 str、int、float、bool 或 None,而不是元组

如果转换为 JSON,我该如何解决这个问题并访问关键元素?

标签: pythonjsontuples

解决方案


如错误所述,元组不能是 JSON 对象的键,您需要某种解决方法。考虑将元组序列化为字符串,但在这种情况下将它们转换回元组可能有点棘手。

d = {str((300, 341)): 4, str((342, 426)): 5}
json.dumps(d)

其他选择是将您存储数据的方式更改为这样的方式

d = [
  {'key1': 300, 'key2': 341, 'value': 4},
  {'key1': 342, 'key2': 426, 'value': 5}
]

显然,您可以将“key1”和“key2”更改为更有意义的内容。

编辑:正如您提到的,您正在使用范围。这个解决方案怎么样?

def jsonify_data(d):
  jsonifable = {'%d:%d' % key: val for key, val in d.items()}
  json.dumps(jsonifable)

def dejsonify_data(jd):
  d = {}
  for key, val in jd.items():
    start, end = key.split(':')
    d[int(start), int(end)] = val
  return d

推荐阅读