Python中的JSON使用

1 投票
2 回答
1036 浏览
提问于 2025-04-16 11:08

我在看json的文档,想搞明白怎么把一个Python对象转换成JSON数据,然后再把这些数据转换回Python对象。我知道可以把列表、字典和包含基本数据类型的元组传给json.dumps(),就像文档开头的例子那样。但是我试着创建一个非常简单的对象,传给json.dumps(),结果却提示“对象无法被转换成JSON”。

那么,怎样才能让一个对象可以被转换成JSON呢?我现在在想,是否可以写一个方法,把我的对象转换成字典,然后再把这个字典传给json.dump(),同时再写一个方法,把字典转换回新的对象。不过这样感觉有点多余,而且限制也很大,我觉得我可能漏掉了什么。有没有人能帮我解答一下?

2 个回答

0

下面这段代码展示了在Python 3中处理JSON的一些方面。请注意JSONEncoder类,以及如何对小数和日期时间进行编码。

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
0

看看 load()dump() 这两个函数;它们都可以接受一个叫 object_hook 的函数,用来处理那些通常不能直接转换成 JSON 格式的对象。也许这对你有帮助。

撰写回答