json.loads与eval的区别,小心使用

对json.loads与eval解析

json.loads对于格式的转换仅限于双引号之内的json格式字符串转化,单引号格式的数据没有兼容性,不能够进行转换
而eval对于单引号与双引号的数据并没有严格的要求,做一下试验就能一目了然了

双引号:

test = '{"m":"shopitemsearch","vm":"nw","sversion":"4.6","shopId":106376474,"sellerId":1779881393,"style":"wf","page":1,"sort":"_sale","q":"","catmap":"","wirelessShopCategoryList":""}'
print(type(test))
print(eval(test))
print(type(eval(test)))
print(json.loads(test))
print(type(json.loads(test)))
可以得到对应的信息:

在这里插入图片描述
得到的信息说明eval与json.loads对于双引号的数据都可以进行转换,但是

单引号:

test = "test = "{'m':'shopitemsearch','vm':'nw','sversion':'4.6','shopId':106376474,'sellerId':1779881393,'style':'wf','page':1,'sort':'_sale','q':'','catmap':'','wirelessShopCategoryList':''}"
print(type(test))
print('eval',eval(test))
print(type(eval(test)))
print('json.loads',json.loads(test))
print(type(json.loads(test)))

同样的代码进行编写,将双引号改编为单引号就会出现错误:

json.loads与eval的区别,小心使用_第1张图片
可以看出来json.loads对于单引号内的数据无法进行转换,可以通过replace将所有的单引号转化为双引号进行使用,但是本人觉得使用eval将格式进行转换更加方便,具体的底层原理还不太清楚,如有不认同可以提出来,我们一起成长

在秃顶的道路上一去不复返

你可能感兴趣的:(python)