python中json.loads与eval区别

本文探讨了Python中json.loads和eval函数在转换JSON字符串到对象时的区别。尽管两者都可用于数据转换,但json.loads更适用于JSON数据,它将字符串转化为Unicode,而eval则能执行字符串表达式。值得注意的是,JSON标准要求使用双引号,而eval对此无限制。

eval()与json.loads()都是将字json符串转换成json对象

对于普通的数据类型,json.loads()和eval()都可以使用:

import json
str = '{"a":1,"b":2}'
dir = eval(str)
print(type(dir),dir)

dir1 = json.loads(str)
print(type(dir1),dir1)
>>><class 'dict'> {'a': 1, 'b': 2}
>>><class 'dict'> {'a': 1, 'b': 2}

在遇到特殊类型的时候,eval就不管用了。eval通常用来执行一个字符串表达式,并返回表达式的值。比如:

str = '{"a":true,"b":2}'
dir = eval(str)
print(type(dir),dir)
报错:
Traceback (most recent call last):
  File "D:/dongjieware/pycharm/api_test11-6/temp/temp1.py", line 3, in <module>
    dir = eval(str)
  File "<string>", line 1, in <module>
NameError: name 'true' is not defined
import json
str = '{"a":true,"b":2}'
dir1 = json.loads(str)
print(type(dir1),dir1)

>>><class 'dict'> {'a': True, 'b': 2}

json不认元素上的单引号,json字符串中的key需要用双引号包起来。

import json
str = "{'a':1,'b':2}"
dir1 = json.loads(str)
print(type(dir1),dir1)

>>>Traceback (most recent call last):
>>> File "D:/dongjieware/pycharm/api_test11-6/temp/temp1.py", line 7, in <module>
>>>dir1 = json.loads(str)
>>>File "C:\Users\xfx-pc\AppData\Local\Programs\Python\Python37\lib\json\__init__.py", >>>line 348, in loads
>>> return _default_decoder.decode(s)
>>>File "C:\Users\xfx-pc\AppData\Local\Programs\Python\Python37\lib\json\decoder.py", >>>line 337, in decode
>>> obj, end = self.raw_decode(s, idx=_w(s, 0).end())
>>>File "C:\Users\xfx-pc\AppData\Local\Programs\Python\Python37\lib\json\decoder.py", >>>line 353, in raw_decode
>>>obj, end = self.scan_once(s, idx)
>>>json.decoder.JSONDecodeError: Expecting property name enclosed in double quotes: line >>>1 column 2 (char 1)

 

终上所述,json与eval区别有两点:

1、json.loads()与eval()都能将s转成python中的对象,json.loads将json中的字符串转成unicode(types.UnicodeType),eval转成了str(types.StringType)。

2、json不认单引号,json中的字符串需要用双引号包起来

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值