Home  >  Article  >  Backend Development  >  Python json error xx is not JSON serializable solution introduction

Python json error xx is not JSON serializable solution introduction

高洛峰
高洛峰Original
2017-03-15 18:16:394537browse

This article mainly introduces the relevant information about the solution of Python json Error xx is not JSON serializable. Friends who need it can refer to it

Python json error xx is not JSON serializable solution

When using json, we often encounter xxx is not JSON serializable, that is, some cannot be serialized Object. Students who often use django know that django has its own Encoder to serialize commonly used objects such as time. In fact, we can define the serialization of specific types of objects ourselves. Let’s take a look at how to define and use it.


#!/usr/bin/env python 
# -*- coding: utf-8 -*- 
#json_extention 
#2014-03-16 
#copyright: orangleliu 
#license: BSD 
 
''''' 
python中dumps方法很好用,可以直接把我们的dict直接序列化为json对象 
但是有的时候我们加了一些自定义的类就没法序列化了,这个时候需要 
自定义一些序列化方法 
 
参考: 
http://www.php.cn/ 
 
例如: 
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 
&#39;&#39;&#39; 
 
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 = {&#39;num&#39;:1112, &#39;date&#39;:datetime.now()} 
print json.dumps(json_1, cls=DateEncoder) 
 
&#39;&#39;&#39;&#39;&#39; 
输出结果: 
 
PS D:\code\python\python_abc> python .\json_extention.py 
{"date": "2014-03-16 13:56:39.003000", "num": 1112} 
&#39;&#39;&#39; 
 
#我们自定义一个类试试 
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 = {&#39;user&#39;:User(&#39;orangle&#39;)} 
print json.dumps(json_2, cls=UserEncoder) 
 
&#39;&#39;&#39;&#39;&#39; 
PS D:\code\python\python_abc> python .\json_extention.py 
{"date": "2014-03-16 14:01:46.738000", "num": 1112} 
{"user": "orangle"} 
 
&#39;&#39;&#39;

The definition of the processing method is a subclass of inheritedjson.JSONEncoder, which is used in the clsfunction of the dumps methodAdd custom processing methods.

Thank you for reading, I hope it can help you, thank you for your support of this site!

The above is the detailed content of Python json error xx is not JSON serializable solution introduction. For more information, please follow other related articles on the PHP Chinese website!

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn