MENU

【日常Py】Json字符串递归处理函数

October 7, 2018 • Read: 1130 • 技术杂谈

2019-08-24
再次翻到这个文章,大家别看了;感觉自己在丢人......



前言:昨晚在写一个爬虫(TX视频)的时候,接口返回的都是一长串长串长串的json数据,然后我就很正常的使用使用模块Json的loads()方法(不懂请移步->菜鸟教程)进行处理,将合法的json处理成字典或列表数据,正常来讲是没什么问题的。

问题:正常的loads方法只能将json字符串最外层的处理成字典(or列表)变量,如果你的json没有多层封装解析一次就直接能用,相反如果是多层每次再调用loads就显得特别麻烦。

上面叙述你可能没懂,简单讲:正常loads只能解析一维数组,针对多维只能解析最外层数据。

在PHP中,函数json_decode()一次搞定,Python让我很纠结...

解决方法:百度了一下,也有不少类似问题,没细看,感觉答案都不是我想要的;最后还是决定自己造轮子,利用递归对多维数据解析再返回,下面是实现代码。

def json_decode(json_str):#传入json字符串,递归解析成列表或者字典
    import json
    ret=None
    '''
    1.判断传入字符串是否是合法json string
    2.是 json,返回解析结果;递归迭代元素
    3.非 json,原样返回字符串
    '''
    try:
        ret=json.loads(json_str)
        if(isinstance(ret,dict)):
            for x in ret:
                ret[x]=json_decode(ret[x])
        elif(isinstance(ret,list)):
            for x in range(len(ret)):
                ret[x]=json_decode(ret[x])
        return ret
    except:
        return json_str

结语:分享此函数,望能帮助大家。

Last Modified: August 24, 2019