मॉडल को क्रमबद्ध करने के लिए, निम्नलिखित अजगर के रूप में एक कस्टम जोंस एनकोडर जोड़ें:
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 / if अभिव्यक्तियों को 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)