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实现360皮肤按钮控件示例
Feb 21 Python
python通过文件头判断文件类型
Oct 30 Python
Python如何为图片添加水印
Nov 25 Python
Python安装官方whl包和tar.gz包的方法(推荐)
Jun 04 Python
python的多重继承的理解
Aug 06 Python
OPENCV去除小连通区域,去除孔洞的实例讲解
Jun 21 Python
python对视频画框标记后保存的方法
Dec 07 Python
Python3爬虫学习入门教程
Dec 11 Python
Python图像处理之颜色的定义与使用分析
Jan 03 Python
python3.4爬虫demo
Jan 22 Python
python多线程抽象编程模型详解
Mar 20 Python
Python如何使用paramiko模块连接linux
Mar 18 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面向对象全攻略 (二) 实例化对象 使用对象成员
2009/09/30 PHP
libmysql.dll与php.ini是否真的要拷贝到c:\windows目录下呢
2010/03/15 PHP
PHP 日,周,月点击排行统计
2012/01/11 PHP
php简单生成随机数的方法
2015/07/30 PHP
Alliance vs Liquid BO3 第三场2.13
2021/03/10 DOTA
教你如何在 Javascript 文件里使用 .Net MVC Razor 语法
2014/07/23 Javascript
JS实现CheckBox复选框全选全不选功能
2015/05/06 Javascript
jQuery判断一个元素是否可见的方法
2015/06/05 Javascript
jQuery取消ajax请求的方法
2015/06/09 Javascript
js编写当天简单日历效果【实现代码】
2016/05/03 Javascript
Angular使用ng-messages与PHP进行表单数据验证
2016/12/28 Javascript
浅谈vue+webpack项目调试方法步骤
2017/09/11 Javascript
JS中判断某个字符串是否包含另一个字符串的五种方法
2018/05/03 Javascript
Angularjs实现多图片上传预览功能
2018/07/18 Javascript
JavaScript实现的开关灯泡点击切换特效示例
2019/07/08 Javascript
vue中在vuex的actions中请求数据实例
2019/11/08 Javascript
微信小程序webSocket的使用方法
2020/02/20 Javascript
在pycharm中开发vue的方法步骤
2020/03/04 Javascript
JavaScript实现tab栏切换效果
2020/03/16 Javascript
JavaScript实现拖拽效果
2020/03/16 Javascript
基于VUE实现判断设备是PC还是移动端
2020/07/03 Javascript
python使用fileinput模块实现逐行读取文件的方法
2015/04/29 Python
详解Python多线程
2016/11/14 Python
python内存管理机制原理详解
2019/08/12 Python
Myprotein荷兰官网:欧洲第一运动营养品牌
2020/07/11 全球购物
预备党员党课思想汇报
2014/01/13 职场文书
《一本男孩子必读的书》教学反思
2014/02/19 职场文书
劲霸男装广告词改编版
2014/03/21 职场文书
初中班主任寄语
2014/04/04 职场文书
教师求职信范文
2014/05/24 职场文书
十一国庆节“向国旗敬礼”主题班会活动方案
2014/09/27 职场文书
教师思想作风整顿个人剖析材料
2014/10/10 职场文书
公司回复函格式
2015/07/14 职场文书
golang特有程序结构入门教程
2021/06/02 Python
详解Java实践之抽象工厂模式
2021/06/18 Java/Android
基于Python实现对比Exce的工具
2022/04/07 Python