将python dict转换为Json

时间:2019-05-22 12:32:02

标签: json python-3.x

我从方法中得到以下命令:

{'patterns': {(38,): 2, (19,): 4, (9, 19): 3, (9,): 4}, 
  'rules': {(9,): ((19,), 0.75), (19,): ((9,), 0.75)}
 }

当我尝试使用json.dumps(myDict)将其转换为Json时,出现以下错误:

TypeError: keys must be str, int, float, bool or None, not tuple

还有其他方法可以转换它吗?

非常感谢!

1 个答案:

答案 0 :(得分:0)

json仅支持将字符串作为键,因此不允许使用元组作为键

his answer of a similar question中的@SingleNegationElimination:

  

您不能将其序列化为json,json对于什么算作dict键比python灵活得多。

但是,通过@SingleNegationElimination的remap_keys函数的自定义扩展,您可以将无效的dict转换为有效的json对象。

def remap_keys(d):
    if not isinstance(d, dict):
        return d
    rslt = []
    for k, v in d.items():
        k = remap_keys(k)
        v = remap_keys(v)
        rslt.append({'key': k, 'value': v})
    return rslt

>>> remap_keys(myDict)
[{'key': 'patterns',
  'value': [{'key': (38,), 'value': 2},
            {'key': (19,), 'value': 4},
            {'key': (9, 19), 'value': 3},
            {'key': (9,), 'value': 4}]},
 {'key': 'rules',
  'value': [{'key': (9,), 'value': ((19,), 0.75)},
            {'key': (19,), 'value': ((9,), 0.75)}]}]

您可以通过以下方式成功json.dumps dict

json.dumps(remap_keys(myDict))