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两个整数相除得到浮点数值的方法
Mar 18 Python
使用python实现生成用户信息
Mar 20 Python
理解python中生成器用法
Dec 20 Python
python画折线图的程序
Jul 26 Python
Django实现单用户登录的方法示例
Mar 28 Python
python隐藏终端执行cmd命令的方法
Jun 24 Python
在Pandas中处理NaN值的方法
Jun 25 Python
python enumerate内置函数用法总结
Jan 07 Python
python numpy生成等差数列、等比数列的实例
Feb 25 Python
浅谈anaconda python 版本对应关系
Oct 07 Python
python跨文件使用全局变量的实现
Nov 17 Python
python+playwright微软自动化工具的使用
Feb 02 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
mysql+php分页类(已测)
2008/03/31 PHP
php中如何同时使用session和cookie来保存用户登录信息
2013/07/05 PHP
phpmailer在服务器上不能正常发送邮件的解决办法
2014/07/08 PHP
常用PHP数组排序函数归纳
2016/08/08 PHP
win10下 php安装seaslog扩展的详细步骤
2020/12/04 PHP
JavaScript 语言的递归编程
2010/05/18 Javascript
js 创建快捷方式的代码(fso)
2010/11/19 Javascript
基于jquery创建的一个图片、视频缓冲的效果样式插件
2012/08/28 Javascript
将Datatable转化成json发送前台实现思路
2013/09/06 Javascript
jquery实现在页面加载的时自动为日期插件添加当前日期
2014/08/20 Javascript
在Node.js应用中使用Redis的方法简介
2015/06/24 Javascript
SpringMVC框架下JQuery传递并解析Json格式的数据是如何实现的
2015/12/10 Javascript
Angular2安装angular-cli
2017/05/21 Javascript
详解webpack的配置文件entry与output
2017/08/21 Javascript
微信小程序中使用Async-await方法异步请求变为同步请求方法
2019/03/28 Javascript
Node 搭建一个静态资源服务器的实现
2019/05/20 Javascript
ES6小技巧之代替lodash
2019/06/07 Javascript
JS实现电商商品展示放大镜特效
2020/01/07 Javascript
原生JS利用transform实现banner的无限滚动示例代码
2020/06/15 Javascript
JavaScript实现答题评分功能页面
2020/06/24 Javascript
Js数组扁平化实现方法代码总汇
2020/11/11 Javascript
[48:32]2018DOTA2亚洲邀请赛 3.31 小组赛 A组 LGD vs VG
2018/04/01 DOTA
Python标准库之Sys模块使用详解
2015/05/23 Python
在Python的Django框架中包装视图函数
2015/07/20 Python
Django中ORM表的创建和增删改查方法示例
2017/11/15 Python
matlab中实现矩阵删除一行或一列的方法
2018/04/04 Python
python高阶爬虫实战分析
2018/07/29 Python
pycharm配置pyqt5-tools开发环境的方法步骤
2019/02/11 Python
Superdry极度干燥美国官网:英国制造的服装品牌
2018/11/13 全球购物
综合素质的自我鉴定
2013/10/07 职场文书
机关出纳岗位职责
2014/04/03 职场文书
2014银行领导班子四风对照检查材料思想汇报
2014/09/25 职场文书
学校通报表扬范文
2015/05/04 职场文书
2015年社区平安建设工作总结
2015/05/13 职场文书
火锅店的开业营销方案范本!
2019/07/05 职场文书
html form表单基础入门案例讲解
2021/07/21 HTML / CSS