Python json error xx is not JSON serializable solution
- 2020-05-26 09:37:21
- OfStack
Python json error xx is not JSON serializable solution
When using json, you often encounter xxx is not JSON serializable, which means you cannot serialize certain objects. Those of you who use django a lot know that django has a built-in Encoder to serialize common objects such as time. We can actually define the serialization of a particular type of object, so let's see how to define and use it.
#!/usr/bin/env python
# -*- coding: utf-8 -*-
#json_extention
#2014-03-16
#copyright: orangleliu
#license: BSD
'''''
python In the dumps The method is very easy to use, you can directly put our dict Direct serialization to json object
But sometimes we add 1 Some custom classes will not be serialized
The custom 1 Some serialization methods
Reference:
http://docs.python.org/2.7/library/json.html
For example, :
In [3]: from datetime import datetime
In [4]: json_1 = {'num':1112, 'date':datetime.now()}
In [5]: import json
In [6]: json.dumps(json_1)
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
D:\devsofts\python2.7\lib\site-packages\django\core\management\commands\shell.py
c in <module>()
----> 1 json.dumps(json_1)
TypeError: datetime.datetime(2014, 3, 16, 13, 47, 37, 353000) is not JSON serial
izable
'''
from datetime import datetime
import json
class DateEncoder(json.JSONEncoder ):
def default(self, obj):
if isinstance(obj, datetime):
return obj.__str__()
return json.JSONEncoder.default(self, obj)
json_1 = {'num':1112, 'date':datetime.now()}
print json.dumps(json_1, cls=DateEncoder)
'''''
Output results:
PS D:\code\python\python_abc> python .\json_extention.py
{"date": "2014-03-16 13:56:39.003000", "num": 1112}
'''
# We customize it 1 A kind of try
class User(object):
def __init__(self, name):
self.name = name
class UserEncoder(json.JSONEncoder):
def default(self, obj):
if isinstance(obj, User):
return obj.name
return json.JSONEncoder.default(self, obj)
json_2 = {'user':User('orangle')}
print json.dumps(json_2, cls=UserEncoder)
'''''
PS D:\code\python\python_abc> python .\json_extention.py
{"date": "2014-03-16 14:01:46.738000", "num": 1112}
{"user": "orangle"}
'''
Define the handler by inheriting a subclass of json.JSONEncoder, and use it by adding a custom handler to the cls function of the dumps method.
Thank you for reading, I hope to help you, thank you for your support of this site!