方便自己,记录下。

#/usr/bin/python
#coding:utf8
#主要查看学习些链接 link http://liuzhijun.iteye.com/blog/1859857
#simplejson 有助于数据交互
#脚本主要验证如果将自定义数据,让json encode字符串化
import simplejson,os
#创建对象,自定义数据,让json去处理,提高可控性
class MyObj:
    def __init__(self, s):
        self.s = s
                                 
    def dicts(self):
        print self.__dict__
    def __repr__(self):
        return '<MyObj(%s)>' % self.s
#这个方法其实就是将Myobj对象转换成dict类型的对象
def convert_to_builtin_type(obj):
    print "#"*20,"检验数据"
    print "当前对象内部的变量"
    obj.dicts()
    print "直接使用对象实例名,会默认调用__repr__私有方法. the result is <MyObj([{'helloword': 123}])>,不过我们可以在对象方法,定义东西------",obj
    print "其实使用直接使用这个方法,也会得出同样的效果. the result is {'s': [{'helloword': 123}]}--------",repr(obj)
    #输出结果和上面的obj一样,直接使用对象实例名,会默认调用__repr__私有方法
    print "#"*20,"检验数据\n"
    print 'default(', repr(obj), ')'
    d = {'__class__':obj.__class__.__name__, '__module__':obj.__module__}
    print "输出内容为{'__module__': '__main__', '__class__': 'MyObj'}\n通过调用对象参数,将其字典化-------",d
    d.update(obj.__dict__)   
    return d
#这个str可以设置为字符串,也可以设置为字典,都是为了验证json只处理特定格式的数据,不会
#读取实例对象,那我们就得必须间接将对象数据字典化
str=[{"helloword":123}]
obj = MyObj(str)
#结果使用对象实例,并返回相应结果时,在下面的json数据封装出现问题
#the result is ERROR: <MyObj([{'helloword': 123}])> is not JSON serializable
#注意,这里提交的是对象实例,会报上面的错误,可是如果调用对象属性则可以成功输出obj.s
try:
    print simplejson.dumps(obj)
except TypeError, err:
    print 'ERROR:', err
print simplejson.dumps(obj, default=convert_to_builtin_type)