Enhanced python-cjson 1.0.3 version: 1.0.3x
Ferenczi Viktor
python at cx.hu
Sun Mar 18 03:00:44 CET 2007
Enhanced version of python-cjson 1.0.3 has been released.
It's numbered 1.0.3x, where x stands for eXtension.
The main improvement is the ability to extend the JSON encoder and decoder
with extensions functions to serialize/unserialize objects not in the
original JSON specification. This is achieved without sacrificing the speed
and stability of the original implementation. Please send bug reports to
python at cx.hu and do not contact the original author (Dan Pascu) about this
version.
Download and more information:
http://cx.hu/python-cjson/
Example to encode/decode python date and datetime objects as JavaScript Date
objects:
import re
import cjson
import datetime
# Encoding Date objects:
def dateEncoder(d):
assert isinstance(d, datetime.date)
return 'new Date(Date.UTC(%d,%d,%d))'%(d.year, d.month, d.day)
json=cjson.encode([1,datetime.date(2007,1,2),2], extension=dateEncoder)
assert json=='[1, new Date(Date.UTC(2007,1,2)), 2]'
# Decoding Date objects:
re_date=re.compile('^new\sDate\(Date\.UTC\(.*?\)\)')
def dateDecoder(json,idx):
json=json[idx:]
m=re_date.match(json)
if not m: raise 'cannot parse JSON string as Date object: %s'%json[idx:]
args=cjson.decode('[%s]'%json[18:m.end()-2])
dt=datetime.date(*args)
return (dt,m.end()) # must return (object, character_count) tuple
data=cjson.decode('[1, new Date(Date.UTC(2007,1,2)), 2]',
extension=dateDecoder)
assert data==[1,datetime.date(2007,1,2),2]
More information about the Python-announce-list
mailing list