json.dump() 给了我“TypeError:keys must be a string”

Ant*_*ton 8 python json

我有一些非常简单的代码,它将带有元组的字典作为键并将其转换为 json:

In [11]:

import simplejson as json
In [12]:

data = {('category1', 'category2'): 4}
In [13]:

json.dumps(data)
Run Code Online (Sandbox Code Playgroud)

但是,运行代码给了我:

TypeError: keys must be a string
Run Code Online (Sandbox Code Playgroud)

我试过 str() 对键和我能找到的所有其他东西,但没有运气。

lar*_*sks 5

错误似乎很清楚:您的键必须是字符串。

如果我从你的问题中举个例子并str()-ify 键:

>>> data = {str(('category1', 'category2')): 4}
Run Code Online (Sandbox Code Playgroud)

它工作得很好:

>>> json.dumps(data)
'{"(\'category1\', \'category2\')": 4}'
Run Code Online (Sandbox Code Playgroud)

话虽如此,在您的位置上,我会考虑使您的密钥更具可读性。可能是这样的:

>>> data = dict((':'.join(k), v) for k,v in data.items())
Run Code Online (Sandbox Code Playgroud)

这会将一个键('category1', 'category2')变成category1:category2

  • 如果这个答案可以解释如何恢复原始对象,那就太好了。`json` 序列化是一种双向操作......仅仅执行 `dumps` 是不够的,还必须知道如何 `loads`。 (3认同)