Использование JSON в Python - PullRequest
       27

Использование JSON в Python

1 голос
/ 03 февраля 2011

Я просматриваю документацию json и пытаюсь понять, как на самом деле преобразовать объект Python в данные JSON, а затем преобразовать эти данные обратно в объект Python.Я понимаю, что вы можете передавать списки, указания и кортежи "примитивов", как в примере вверху, но я попытался создать очень минимальный объект и передать его в json.dumps () и получил "объект не сериализуемый JSON".

Как правильно сделать сериализуемый объект JSON?В настоящее время я представляю, как пишу метод, который преобразует мой объект в словарь, а затем передает его в json.dump () и параллельный метод, чтобы взять словарь и построить из него новый объект.Однако это кажется излишним и ограниченным, поэтому я чувствую, что, должно быть, чего-то не хватает.Кто-нибудь может помочь заполнить меня?

Ответы [ 2 ]

0 голосов
/ 03 февраля 2011

Взгляните на load() и dump();каждый принимает object_hook функцию для декодирования и кодирования объектов, не являющихся обычно JSONable.Может быть, это подойдет вам.

0 голосов
/ 03 февраля 2011

Следующий фрагмент кода иллюстрирует несколько аспектов работы с JSON в Python 3. Обратите внимание на класс JSONEncoder и реализацию кодировки decimal и datetime.

import json
from decimal import Decimal
from datetime import datetime, date

class JSONEncoder(json.JSONEncoder):
  def default(self, o):
    if isinstance(o, Decimal):
      return float(o)
    elif isinstance(o, (datetime, date)):
      return o.isoformat()
    return super().default(self,o)

class JSONDecoder(json.JSONDecoder):
  pass

_Default_Encoder = JSONEncoder(
  skipkeys=False,
  ensure_ascii=False,
  check_circular=True,
  allow_nan=True,
  indent=None,
  separators=None,
  default=None,
  )

_Default_Decoder = JSONDecoder(
  object_hook=None, 
  object_pairs_hook=None
  )

Encode = _Default_Encoder.encode
Decode = _Default_Decoder.decode
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...