我想在JSON中存储一个带有复杂键(元组)的对象,例如:
obj = {('a', '1', '', 'b') : '1'}
但是使用:
import json
json.dumps(obj)
导致以下错误:
TypeError: keys must be a string
将它转换为JSON并在以后解开它的最快/最好的方法是什么?
请注意,它必须存储在典型的JSON数据库中(例如Cloudant / CouchDB / ElasticSearch)。
此外,我认为在我的程序中使用元组非常实用,因此最好使用包含元组作为键的dict(在加载JSON之后)。
答案 0 :(得分:1)
我认为您可以使用两种解决方法。
将数据存储为元组列表,而不是字典。请注意,在重新创建字典时,您必须将不可用的列表转换回元组。
>>> json.dumps(obj.items())
'[[["a", "1", "", "b"], "1"]]'
>>> {tuple(x): y for x, y in json.loads(_)}
{(u'a', u'1', u'', u'b'): u'1'}
将元组转换为字符串,然后在检索值时将这些字符串解析回元组。
>>> import ast
>>> json.dumps({repr(x): y for x, y in obj.items()})
'{"(\'a\', \'1\', \'\', \'b\')": "1"}'
>>> {ast.literal_eval(x): y for x, y in json.loads(_).items()}
{('a', '1', '', 'b'): u'1'}