Python解析json之ValueError: Expecting property name enclosed in double quotes: line 1 column 2(char 1)


Posted in Python onJuly 06, 2017

前言

在Python中提供了json包来方便快捷的解析json字串的转换过程,但是碰到了一个比较奇怪的问题,就是不太正确的json串如何来解析?

1. 问题的提出

今天在处理一个http请求的响应json之时,基于python进行解析,碰到了如下错误:

Traceback (most recent call last): 
 
 File "<ipython-input-16-bff463ed9408>", line 1, in <module> 
 json.loads(r.text) 
 
 File "/Users/tonychen/anaconda2/lib/python2.7/json/__init__.py", line 339, in loads 
 return _default_decoder.decode(s) 
 
 File "/Users/tonychen/anaconda2/lib/python2.7/json/decoder.py", line 364, in decode 
 obj, end = self.raw_decode(s, idx=_w(s, 0).end()) 
 
 File "/Users/tonychen/anaconda2/lib/python2.7/json/decoder.py", line 380, in raw_decode 
 obj, end = self.scan_once(s, idx) 
 
ValueError: Expecting property name enclosed in double quotes: line 1 column 2 (char 1)

看来是解析json的时候出错了....

代码如下:       

import json 
import requests 
 
user_agent = "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; AcooBrowser; .NET CLR 1.1.4322; .NET CLR 2.0.50727)" 
def get_header(): 
 return { 
  'User-Agent': user_agent, 
  'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8', 
  'Accept-Language': 'en-US,en;q=0.5', 
  'Connection': 'keep-alive', 
  'Accept-Encoding': 'gzip, deflate', 
 } 
TEST_URL = 'http://ip.chinaz.com/getip.aspx' 
 
r = requests.get(url=TEST_URL, headers=get_header(), timeout=5) 
jsonstr = json.loads(r.text) 
 
print(jsonstr)

报错的代码行: json.loads(r.text)

那问题出在哪里呢?

2.  问题的分析

让我们先来看看,r.text中的信息是什么吧:

 >> r.text

u"{ip:'103.47.146.9',address:'\u4e9a\u592a\u5730\u533a '}"

仔细观察之后,发现其实应该是ip,address的字段没有相应的引号来包装,所以json无法正确的进行字符串的处理

那正确的json串格式应该是什么样子呢?我们来做个样例看一下

   >> json1 = {'key1': 'val1', 'key2':'val2'}

   >> json.dumps(json1)

'{"key2": "val2", "key1": "val1"}'

正如我们在上文中提到的问题,应该是key没有正确的被括起来。

3.  问题的解决

知道问题出在哪里之后,我们就可以针对性地进行解决了。问题的解决思路有两条:

    a. 针对字符串来进行处理,保证字符串符合json的格式要求

    b.  借助第三方包的帮助顺利解决这个问题

相比而言,方案b可以简便和易用,我们这里使用了demjson的包来处理这个问题。

安装: pip install demjson

使用:  json_obj = demjson(json_string)

简单的一个调用就将这个问题一扫而光,是不是非常的简单易用呀?

4.  demjson的介绍

快速说明: http://deron.meranda.us/python/demjson/

demjson有两个主要的方法:

  encode  编码,将对象转换为json

  decode   解码,将json转化为对象

总结

这个问题的产生主要还是服务端在进行json转换的过程中没有很好处理好这个问题造成的,正常来说,一般不应该出现的的。

好了,以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对三水点靠木的支持。

Python 相关文章推荐
Python写的Socks5协议代理服务器
Aug 06 Python
python和shell实现的校验IP地址合法性脚本分享
Oct 23 Python
Python列表删除的三种方法代码分享
Oct 31 Python
Django中使用Celery的方法示例
Nov 29 Python
Django Rest framework之认证的实现代码
Dec 17 Python
pyqt 多窗口之间的相互调用方法
Jun 19 Python
opencv-python 提取sift特征并匹配的实例
Dec 09 Python
基于torch.where和布尔索引的速度比较
Jan 02 Python
使用Pycharm(Python工具)新建项目及创建Python文件的教程
Apr 26 Python
详解Python中的路径问题
Sep 02 Python
python request 模块详细介绍
Nov 10 Python
七个Python必备的GUI库
Apr 27 Python
CentOS 7下Python 2.7升级至Python3.6.1的实战教程
Jul 06 #Python
Python中定时任务框架APScheduler的快速入门指南
Jul 06 #Python
Python如何快速实现分布式任务
Jul 06 #Python
Python3下错误AttributeError: ‘dict’ object has no attribute’iteritems‘的分析与解决
Jul 06 #Python
Python标准库sched模块使用指南
Jul 06 #Python
用virtualenv建立多个Python独立虚拟开发环境
Jul 06 #Python
基于Python的关键字监控及告警
Jul 06 #Python
You might like
非常好的php目录导航文件代码
2006/10/09 PHP
一个简单安全的PHP验证码类 附调用方法
2016/06/24 PHP
php实现带读写分离功能的MySQL类完整实例
2016/07/28 PHP
前端开发的开始---基于面向对象的Ajax类
2010/09/17 Javascript
jquery键盘事件介绍
2011/01/31 Javascript
Javascript 鼠标移动上去 滑块跟随效果代码分享
2013/11/23 Javascript
JS 屏蔽按键效果与改变按键效果的示例代码
2013/12/24 Javascript
jquery选择器之内容过滤选择器详解
2014/01/27 Javascript
JS实现根据当前文字选择返回被选中的文字
2014/05/21 Javascript
js实现精美的图片跟随鼠标效果实例
2015/05/16 Javascript
基于jQuery实现的仿百度首页滑动选项卡效果代码
2015/11/16 Javascript
JavaScript jquery及AJAX小结
2016/01/24 Javascript
js 上传文件预览的简单实例
2016/08/16 Javascript
浅谈javascript中的三种弹窗
2016/10/21 Javascript
JS常用加密编码与算法实例总结
2016/12/22 Javascript
JavaScript使用ZeroClipboard操作剪切板
2017/05/10 Javascript
vue项目中使用lib-flexible解决移动端适配的问题解决
2018/08/23 Javascript
Vue项目部署的实现(阿里云+Nginx代理+PM2)
2019/03/26 Javascript
vue获取时间戳转换为日期格式代码实例
2019/04/17 Javascript
如何在 ant 的table中实现图片的渲染操作
2020/10/28 Javascript
[40:53]完美世界DOTA2联赛PWL S3 Magma vs DLG 第二场 12.18
2020/12/20 DOTA
py中的目录与文件判别代码
2008/07/16 Python
python使用win32com在百度空间插入html元素示例
2014/02/20 Python
Python实现爬取逐浪小说的方法
2015/07/07 Python
两个命令把 Vim 打造成 Python IDE的方法
2016/03/20 Python
Python模块WSGI使用详解
2018/02/02 Python
Python元组知识点总结
2019/02/18 Python
Python3.5以上版本lxml导入etree报错的解决方案
2019/06/26 Python
python画图——实现在图上标注上具体数值的方法
2019/07/08 Python
基于django 的orm中非主键自增的实现方式
2020/05/18 Python
使用python实现学生信息管理系统
2021/02/25 Python
XD健身器材:Kevlar球、Crossfit健身球
2019/03/26 全球购物
电大毕业自我鉴定
2014/02/03 职场文书
走群众路线学习心得体会
2014/10/31 职场文书
大学生学生会工作总结2015
2015/05/26 职场文书
2016元旦晚会主持人开场白和结束语
2015/12/03 职场文书