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中yield生成器的用法
Aug 05 Python
实例讲解Python中SocketServer模块处理网络请求的用法
Jun 28 Python
pycharm远程调试openstack的图文教程
Nov 21 Python
Python基于高斯消元法计算线性方程组示例
Jan 17 Python
使用Flask集成bootstrap的方法
Jul 24 Python
浅谈python连续赋值可能引发的错误
Nov 10 Python
浅谈python实现Google翻译PDF,解决换行的问题
Nov 28 Python
python字符串查找函数的用法详解
Jul 08 Python
python实现点击按钮修改数据的方法
Jul 17 Python
python opencv进行图像拼接
Mar 27 Python
python 生成任意形状的凸包图代码
Apr 16 Python
python logging.info在终端没输出的解决
May 12 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
mac下安装nginx和php
2013/11/04 PHP
PHP获取网页标题的3种实现方法代码实例
2014/04/11 PHP
destoon官方标签大全
2014/06/20 PHP
php将access数据库转换到mysql数据库的方法
2014/12/24 PHP
ucenter通信原理分析
2015/01/09 PHP
php实现汉字验证码和算式验证码的方法
2015/03/07 PHP
PHP获得数组交集与差集的方法
2015/06/10 PHP
PHP中的命名空间详细介绍
2015/07/02 PHP
Linux安装配置php环境的方法
2016/01/14 PHP
thinkphp在低版本Nginx 下支持PATHINFO的方法分享
2016/05/27 PHP
二级域名转向类
2006/11/09 Javascript
jquery插件制作 图片走廊 gallery
2012/08/17 Javascript
在JavaScript并非所有的一切都是对象
2013/04/11 Javascript
javascript高级编程之函数表达式 递归和闭包函数
2015/11/29 Javascript
静态页面html中跳转传值的JS处理技巧
2016/06/22 Javascript
HTML5canvas 绘制一个圆环形的进度表示实例
2016/12/16 Javascript
利用node.js如何搭建一个简易的即时响应服务器
2017/05/28 Javascript
bootstrap multiselect 多选功能实现方法
2017/06/05 Javascript
JS中DOM元素的attribute与property属性示例详解
2018/09/04 Javascript
JavaScript 对引擎、运行时、调用堆栈的概述理解
2018/10/22 Javascript
JS实现排行榜文字向上滚动轮播效果
2019/11/26 Javascript
python实现用户登陆邮件通知的方法
2015/07/09 Python
Python循环语句之break与continue的用法
2015/10/14 Python
python的构建工具setup.py的方法使用示例
2017/10/23 Python
如何利用Boost.Python实现Python C/C++混合编程详解
2018/11/08 Python
Python一句代码实现找出所有水仙花数的方法
2018/11/13 Python
Python常用模块之requests模块用法分析
2019/05/15 Python
Python字典中的值为列表或字典的构造实例
2019/12/16 Python
Pytorch基本变量类型FloatTensor与Variable用法
2020/01/08 Python
python如何安装下载后的模块
2020/07/03 Python
浅析Python模块之间的相互引用问题
2021/02/26 Python
CSS3的Flexbox布局的简明入门指南
2016/04/08 HTML / CSS
银行实习生自我鉴定范文
2013/09/19 职场文书
大学校园活动策划书
2014/02/04 职场文书
个人诉讼委托书范本
2014/10/17 职场文书
2016元旦文艺汇演主持词
2015/07/06 职场文书