/ / Armazena chave complexa (tupla) em JSON em Python - python, json, tuplas, complextype

Armazena chaves complexas (tuplas) em JSON em Python - python, json, tuplas, complextype

Eu gostaria de armazenar um objeto com uma chave complexa (tupla) em JSON, por exemplo:

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

Mas usando:

import json
json.dumps(obj)

resulta no seguinte erro:

TypeError: keys must be a string

Qual é a maneira mais rápida / melhor de convertê-lo em JSON e descompactá-lo mais tarde?

Observe que ele deve ser armazenado em um banco de dados JSON típico (por exemplo, Cloudant / CouchDB / ElasticSearch).

Além disso, eu acho que é muito prático usar a tupla no meu programa, e assim preferir acabar com um dict contendo tuplas como chaves (depois de carregar o JSON).

Respostas:

1 para resposta № 1

Eu acho que existem duas soluções alternativas que você pode usar.

  1. Armazene os dados como uma lista de tuplas, em vez de um dicionário. Note que você terá que transformar as listas não ajustáveis ​​em tuplas ao recriar o dicionário.

    >>> 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. Converta as tuplas em strings e, em seguida, analise essas strings de volta às tuplas ao recuperar os valores.

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