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
结语:分享此函数,望能帮助大家。