python 中 json解码时候 解析数据会报错:
报错 ‘unicode’ object has no attribute ‘has_key’
这是因为我们在使用python的 json.loads() 时候.
会将json的string类型转换为 python的unicode类型,这个不是重点
重点是 json数据中某一项的值为None就是为空,这个时候我们是不能用has_key的方法判断该键的值是否含有某个键,
此时就会报出’unicode’ object has no attribute ‘has_key’ 这个错误
例子及解决方法如下:
有一个json数据,我们要取出url的值
import json
json_str = '{"11": "", "10": "", "12": {"picture": [{"latitude": 39.9217, "url": "http://baidu.com", "longitude": 116.461}]}}'
json_data = json.loads(json_str)
#{u'11': u'', u'10': u'', u'12': {u'picture': [{u'latitude': 39.9217, u'url': u'http://baidu.com', u'longitude': 116.461}]}}
这个json_str里某个键('10','11')的值为空,
那么应该这么判断取出
if json_data['10']:
if json_data['10']['picture']:
data_10 = json_data['10']['picture'][0]['url']
而不能用下面的方法:python2 字典才有has_key方法
if json_data.has_key("10"):
if json_data['10'].has_key('picture'):
data_10 = json_data['10']['picture'][0]['url']
这样就会报错:
if json_data['10'].has_key('picture'):
'unicode' object has no attribute 'has_key'
因为json_data['10']的值为空,不能用has_key方法继续判断了
当然还可以用这种方法:可以在python2和3中都通用
if '10' in json_data:
if 'picture' in json_data['10']:
data_10 = json_data['10']['picture'][0]['url']