python to_json 递归

def f_to_json(obj,result):
    u"""
    递归函数调用
    """
    if type(obj) == types.DictType:
        result.append("{")
        is_null = True
        for k,v in obj.items():
            is_null = False
            result.append("'%s':"%k)
            f_to_json(v,result)
            result.append(",")
        if not is_null:
            result.pop()
        result.append("}")
    elif type(obj) == types.ListType:
        result.append("[")
        is_null = True
        for elem in obj:
            is_null = False
            f_to_json(elem,result)
            result.append(",")
        
        if not is_null:
            result.pop()
        
        result.append("]")
    elif type(obj) == types.IntType:
        result.append("%s"%obj)
    elif type(obj) == types.StringType:
        result.append("'%s'"%obj)
    
    return "".join(result)

def stack_to_json(obj):
    result = []
    stack = []
    stack.append(obj)
    while stack:
        elem = stack.pop()
        if type(elem) == types.DictType:
            stack.append("{")
            is_null = True
            for k,v in elem.items():
                is_null = False
                stack.append("'%s'"%k)
                stack.append(":")
                if type(v) == types.StringType:
                    stack.append("'%s'"%v)
                else:
                    stack.append(v)
                stack.append(",")
            if not is_null:
                stack.pop()
            stack.append("}")
        elif type(elem) == types.ListType:
            stack.append("[")
            is_null = True
            for e in elem:
                is_null = False
                if type(e) == types.StringType:
                    stack.append("'%s'"%e)
                else:
                    stack.append(e)
                stack.append(",")
            
            if not is_null:
                stack.pop()
            stack.append("]")
        
        elif type(elem) in( types.IntType,types.StringType):
            result.append("%s"%elem)
            
        else:
            print 'other',elem
            break
    result.reverse()
    return "".join(result)

        
if __name__ == "__main__":
    r = []
    d = {"a":[{"c":"v","g":"gg"}],"a2":["a","b","c",{"k":"v"}]}
    
    print 'original dict====',d
    print 'function to json ====',f_to_json(d,r)
    
    print 'stack to json========',stack_to_json(d)


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值