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使用心得之获得github代码库列表
Jun 25 Python
python将ip地址转换成整数的方法
Mar 17 Python
基于python爬虫数据处理(详解)
Jun 10 Python
Windows环境下python环境安装使用图文教程
Mar 13 Python
linux中如何使用python3获取ip地址
Jul 15 Python
详解python实现小波变换的一个简单例子
Jul 18 Python
Numpy数组array和矩阵matrix转换方法
Aug 05 Python
win10安装tesserocr配置 Python使用tesserocr识别字母数字验证码
Jan 16 Python
tensorflow之tf.record实现存浮点数数组
Feb 17 Python
Python爬虫工具requests-html使用解析
Apr 29 Python
python读取xml文件方法解析
Aug 04 Python
Python使用tkinter制作在线翻译软件
Feb 22 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实现rc4加密算法代码
2012/04/25 PHP
Smarty foreach控制循环次数的一些方法
2015/07/01 PHP
Smarty模板引擎缓存机制详解
2016/05/23 PHP
PHP的时间戳与具体时间转化的简单实现
2016/06/13 PHP
Yii2处理密码加密及验证的方法
2019/05/12 PHP
!DOCTYPE声明对JavaScript的影响分析
2010/04/12 Javascript
JS中typeof与instanceof之间的区别总结
2013/11/14 Javascript
js判断字符是否是汉字的两种方法小结
2014/01/03 Javascript
jQuery源码解读之removeClass()方法分析
2015/02/20 Javascript
探索angularjs+requirejs全面实现按需加载的套路
2016/02/26 Javascript
微信小程序 wxapp内容组件 text详细介绍
2016/10/31 Javascript
JS 循环li添加点击事件 (闭包的应用)
2016/12/10 Javascript
JS简单获取当前日期和农历日期的方法
2017/04/17 Javascript
解决layui调用自定义方法提示未定义的问题
2019/09/14 Javascript
layui-table获得当前行的上/下一行数据的例子
2019/09/24 Javascript
vue 组件销毁并重置的实现
2020/01/13 Javascript
Python操作列表的常用方法分享
2014/02/13 Python
基于Python如何使用AIML搭建聊天机器人
2016/01/27 Python
简单讲解Python中的数字类型及基本的数学计算
2016/03/11 Python
python爬虫框架scrapy实战之爬取京东商城进阶篇
2017/04/24 Python
python虚拟环境virtualenv的安装与使用
2017/09/21 Python
python3实现钉钉消息推送的方法示例
2019/03/14 Python
python实现图片转字符小工具
2019/04/30 Python
对python中不同模块(函数、类、变量)的调用详解
2019/07/16 Python
Django上使用数据可视化利器Bokeh解析
2019/07/31 Python
Python selenium抓取虎牙短视频代码实例
2020/03/02 Python
win10下python3.8的PIL库安装过程
2020/06/08 Python
Python如何输出百分比
2020/07/31 Python
CSS3中新增的对文本和字体的设置
2020/02/03 HTML / CSS
StubHub智利:购买和出售您的门票
2016/11/23 全球购物
一名毕业生的自我鉴定
2013/12/04 职场文书
开学季活动策划方案
2014/02/28 职场文书
机械工程及其自动化专业求职信
2014/08/08 职场文书
库房管理员岗位职责
2015/02/12 职场文书
《我在为谁工作》:工作的质量往往决定生活的质量
2019/12/27 职场文书
Android开发之底部导航栏的快速实现
2022/04/28 Java/Android