将复杂键(元组)存储到 Python 中的 JSON

Store complex key (tuple) into JSON in Python

我想在 JSON 中存储一个具有复杂键(元组)的对象,例如:

obj = {('a', '1', '', 'b') : '1'}

但使用:

import json
json.dumps(obj)

导致以下错误:

TypeError: keys must be a string

将其转换为 JSON 并稍后解开的 fastest/best 方法是什么?

请注意,它必须存储在典型的 JSON 数据库中(例如 Cloudant/CouchDB/ElasticSearch)。

此外,我认为在我的程序中使用元组非常实用,因此更愿意以包含元组作为键的字典结束(在加载 JSON 之后)。

我认为您可以使用两种解决方法。

  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'}
    
  2. 将元组转换为字符串,然后在检索值时将这些字符串解析回元组。

    >>> 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'}