Python json 오류 xx is not JSON serializable 해결 방법

Python json 오류 xx is not JSON serializable 해결 방법
제 이 슨 을 사용 할 때 xxx 를 자주 만 나 요.  is not JSON serializable,즉 특정 대상 을 정렬 할 수 없습니다.django 를 자주 사용 하 는 학생 들 은 django 에 시간 등 자주 사용 하 는 대상 이 있다 는 것 을 알 고 있 습 니 다.사실 우 리 는 특정 유형의 대상 에 대한 서열 화 를 스스로 정의 할 수 있 으 며,아래 에서 어떻게 정의 하고 사용 하 는 지 볼 수 있다.

#!/usr/bin/env python 
# -*- coding: utf-8 -*- 
#json_extention 
#2014-03-16 
#copyright: orangleliu 
#license: BSD 
 
''''' 
python dumps     ,        dict      json   
                        ,       
           
 
  : 
http://docs.python.org/2.7/library/json.html 
 
  : 
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) 
 
''''' 
    : 
 
PS D:\code\python\python_abc> python .\json_extention.py 
{"date": "2014-03-16 13:56:39.003000", "num": 1112} 
''' 
 
#           
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"} 
 
''' 
정의 처리 방법 은 json.JSONencoder 의 하위 클래스 를 계승 하 는 것 입 니 다.사용 할 때 dumps 방법의 cls 함수 에 사용자 정의 처리 방법 을 추가 합 니 다.
읽 어 주 셔 서 감사합니다. 여러분 에 게 도움 이 되 기 를 바 랍 니 다.본 사이트 에 대한 여러분 의 지지 에 감 사 드 립 니 다!

좋은 웹페이지 즐겨찾기