在Python中将复杂键(元组)存储到JSON中
我希望在JSON中存储具有复杂键(元组)的对象,例如:在Python中将复杂键(元组)存储到JSON中,python,json,tuples,complextype,Python,Json,Tuples,Complextype,我希望在JSON中存储具有复杂键(元组)的对象,例如: obj = {('a', '1', '', 'b') : '1'} 但使用: import json json.dumps(obj) 导致以下错误: TypeError: keys must be a string 将其转换为JSON并在以后取消粘贴的最快/最好的方法是什么 注意,它必须存储在典型的JSON数据库中(例如Cloudant/CouchDB/ElasticSearch) 此外,我认为在我的程序中使用元组是非常实用的,因此我
obj = {('a', '1', '', 'b') : '1'}
但使用:
import json
json.dumps(obj)
导致以下错误:
TypeError: keys must be a string
将其转换为JSON并在以后取消粘贴的最快/最好的方法是什么
注意,它必须存储在典型的JSON数据库中(例如Cloudant/CouchDB/ElasticSearch)
此外,我认为在我的程序中使用元组是非常实用的,因此我更愿意使用包含元组作为键的dict(在加载JSON之后)。我认为有两种解决方法可以使用
>>> 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'}
要么将元组转换为字符串表示,要么将dict转换为元组列表。@tobias_k
tuple(str(('a','1','b'))
将str
上的文档中的每个字符分隔开来):“与repr(object)
的区别在于str(object)不总是试图返回一个可接受的代码,它的目标是返回一个可打印的字符串。“这意味着,如果您希望值可以接受<代码> EVA或更好的<代码> AST.MetralAlvia必须使用<代码> RePr>代码>而不是<代码> STR < /代码>。(repr(“1”)
产生“1”
但是ast.literal_-eval(str(“1”)
产生1
@DanD。同意应该使用repr
,但是对于元组,repr
和str
都产生相同的输出。非常好,没有代码我真的不理解第一个例子。