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 解析XML python模块xml.dom解析xml实例代码
Feb 07 Python
全面了解python字符串和字典
Jul 07 Python
Python WXPY实现微信监控报警功能的代码
Oct 20 Python
Python类的继承和多态代码详解
Dec 27 Python
全面分析Python的优点和缺点
Feb 07 Python
对Python中的@classmethod用法详解
Apr 21 Python
python 字符串和整数的转换方法
Jun 25 Python
Python爬虫框架Scrapy基本用法入门教程
Jul 26 Python
python如何求解两数的最大公约数
Sep 27 Python
pytorch简介
Nov 11 Python
python爬虫中抓取指数的实例讲解
Dec 01 Python
聊聊基于pytorch实现Resnet对本地数据集的训练问题
Mar 25 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 INI配置文件的解析实现分析
2011/01/04 PHP
thinkphp 多表 事务详解
2013/06/17 PHP
2个Codeigniter文件批量上传控制器写法例子
2014/07/25 PHP
php+mysqli数据库连接的两种方式
2015/01/28 PHP
thinkPHP框架中执行事务的方法示例
2018/05/31 PHP
PHP的HTTP客户端Guzzle简单使用方法分析
2019/10/30 PHP
犀利的js 函数集合
2009/06/11 Javascript
jquery xMarquee实现文字水平无缝滚动效果
2014/04/29 Javascript
node.js中的fs.fchmodSync方法使用说明
2014/12/16 Javascript
基于jquery实现百度新闻导航菜单滑动动画
2016/03/15 Javascript
jquery输入数字随机抽奖特效的简单实现代码
2016/06/10 Javascript
基于bootstrap-datetimepicker.js不支持IE8的快速解决方法
2016/11/07 Javascript
Node.js制作简单聊天室
2017/01/12 Javascript
推荐三款不错的图片压缩上传插件(webuploader、localResizeIMG4、LUploader)
2017/04/21 Javascript
微信小程序动画(Animation)的实现及执行步骤
2018/10/28 Javascript
elementUI多选框反选的实现代码
2019/04/03 Javascript
vue实现页面滚动到底部刷新
2019/08/16 Javascript
React-redux实现小案例(todolist)的过程
2019/09/29 Javascript
微信小程序 自定义弹窗实现过程(附代码)
2019/12/05 Javascript
40行代码把Vue3的响应式集成进React做状态管理
2020/05/20 Javascript
[33:15]2018DOTA2亚洲邀请赛3月30日 小组赛B组 VP VS Mineski
2018/03/31 DOTA
Python中的两个内置模块介绍
2015/04/05 Python
Python实现的双色球生成功能示例
2017/12/18 Python
python实现时间o(1)的最小栈的实例代码
2018/07/23 Python
python中用logging实现日志滚动和过期日志删除功能
2019/08/20 Python
Python 解决火狐浏览器不弹出下载框直接下载的问题
2020/03/09 Python
解决Keras使用GPU资源耗尽的问题
2020/06/22 Python
Pytest单元测试框架如何实现参数化
2020/09/05 Python
Python 带星号(* 或 **)的函数参数详解
2021/02/23 Python
纯CSS3实现移动端展开和收起效果的示例代码
2020/04/26 HTML / CSS
蔻驰美国官网:COACH美国
2016/08/18 全球购物
春节联欢会主持词
2014/03/24 职场文书
高中生第一学年自我鉴定2015
2014/09/28 职场文书
德能勤绩廉个人总结
2015/02/14 职场文书
生死牛玉儒观后感
2015/06/11 职场文书
2016五四青年节活动总结范文
2016/04/06 职场文书