ในการทำให้เป็นอนุกรมให้เพิ่มตัวเข้ารหัส json ที่กำหนดเองดังใน python ต่อไปนี้:
import datetime
from google.appengine.api import users
from google.appengine.ext import db
from django.utils import simplejson
class jsonEncoder(simplejson.JSONEncoder):
def default(self, obj):
if isinstance(obj, datetime.datetime):
return obj.isoformat()
elif isinstance(obj, db.Model):
return dict((p, getattr(obj, p))
for p in obj.properties())
elif isinstance(obj, users.User):
return obj.email()
else:
return simplejson.JSONEncoder.default(self, obj)
simplejson.dumps(model, cls=jsonEncoder)
สิ่งนี้จะเข้ารหัส:
- วันที่เป็นสตริง isoformat ( ตามคำแนะนำนี้ )
- แบบจำลองเป็นคำสั่งของคุณสมบัติ
- ผู้ใช้เป็นอีเมลของเขา
ในการถอดรหัสวันที่คุณสามารถใช้จาวาสคริปต์นี้:
function decodeJsonDate(s){
return new Date( s.slice(0,19).replace('T',' ') + ' GMT' );
} // Note that this function truncates milliseconds.
หมายเหตุ: ขอบคุณผู้ใช้pydaveที่แก้ไขโค้ดนี้เพื่อให้อ่านง่ายขึ้น แต่เดิมฉันเคยใช้นิพจน์ if / else ของ python เพื่อแสดงjsonEncoder
ในบรรทัดน้อยลงดังนี้: (ฉันได้เพิ่มความคิดเห็นและใช้google.appengine.ext.db.to_dict
เพื่อให้ชัดเจนกว่าต้นฉบับ)
class jsonEncoder(simplejson.JSONEncoder):
def default(self, obj):
isa=lambda x: isinstance(obj, x)
return obj.isoformat() if isa(datetime.datetime) else \
db.to_dict(obj) if isa(db.Model) else \
obj.email() if isa(users.User) else \
simplejson.JSONEncoder.default(self, obj)