刚开始使用的是json.load()
json.load(‘{\”a\”:1}’)
Traceback (most recent call last):
File “”, line 1, in
File “/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/json/init.py”, line 286, in load
return loads(fp.read(),
AttributeError: ‘str’ object has no attribute ‘read’
load是从文件中加载,要从字符串加载需要使用json.loads()
http://stackoverflow.com/questions/3847399/convert-a-json-string-to-python-object
json.loads(‘{\”a\”:1}’)
{u’a’: 1}
经常会出现以下问题:
ss = “{‘a’:1,’b’:2}”
json.loads(ss)
Traceback (most recent call last):
File “”, line 1, in
File “/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/json/init.py”, line 338, in loads
return _default_decoder.decode(s)
File “/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/json/decoder.py”, line 366, in decode
obj, end = self.raw_decode(s, idx=_w(s, 0).end())
File “/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/json/decoder.py”, line 382, in raw_decode
obj, end = self.scan_once(s, idx)
ValueError: Expecting property name: line 1 column 2 (char 1)
原因是json字符串里面的key需要用双引号扩起来,不能以为python中单引号/双引号效果一样就随意使用!
其实要达到同样目的的还有eval,
ss = “{‘a’:1,’b’:2}”
eval(ss)
{‘a’: 1, ‘b’: 2}
eval真是好用!更重要的是返回的是一个str类型的,而json.loads返回的是一个unicode类型!
os.system(“cat json.dat”)
{
“a”:1,
“b”:2
}
0
使用json.load()解析
json.load(“json.dat”)
Traceback (most recent call last):
File “”, line 1, in
File “/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/json/init.py”, line 286, in load
return loads(fp.read(),
AttributeError: ‘str’ object has no attribute ‘read’
查看json.load的用法:
help(json.load)
Help on function load in module json:
load(fp, encoding=None, cls=None, object_hook=None, parse_float=None, parse_int=None, parse_constant=None, object_pairs_hook=None, **kw)
Deserialize fp
(a .read()
-supporting file-like object containing
a JSON document) to a Python object.
可以看到,需要的是一个文件描述符,
json.load(open(“json.dat”))
{u’a’: 1, u’b’: 2}
json.load(file(“json.dat”))
{u’a’: 1, u’b’: 2}
这样就可以了!
这篇文章讲的比较详细!http://blog.csdn.net/djskl/article/details/44783777