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 相关文章推荐
Mac OS X10.9安装的Python2.7升级Python3.3步骤详解
Dec 04 Python
Python的Flask框架及Nginx实现静态文件访问限制功能
Jun 27 Python
Python实现对一个函数应用多个装饰器的方法示例
Feb 09 Python
简单谈谈Python的pycurl模块
Apr 07 Python
Python实现的NN神经网络算法完整示例
Jun 19 Python
python实现自主查询实时天气
Jun 22 Python
Python创建一个空的dataframe,并循环赋值的方法
Nov 08 Python
Python逐行读取文件中内容的简单方法
Feb 26 Python
PyQt5 QListWidget选择多项并返回的实例
Jun 17 Python
Flask-WTF表单的使用方法
Jul 12 Python
详解pyinstaller生成exe的闪退问题解决方案
Jun 19 Python
利用Python读取微信朋友圈的多种方法总结
Aug 23 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的超级变量$_POST获取HTML表单(HTML Form) 数据
2011/05/07 PHP
CodeIgniter实现从网站抓取图片并自动下载到文件夹里的方法
2015/06/17 PHP
通过PHP自带的服务器来查看正则匹配结果的方法
2015/12/24 PHP
php实现图片按比例截取的方法
2017/02/06 PHP
Alliance vs AM BO3 第二场2.13
2021/03/10 DOTA
jQuery实现的感应鼠标悬停图片色彩渐显效果
2015/03/03 Javascript
jQuery简单几行代码实现tab切换
2015/03/10 Javascript
JavaScript获取页面中表单(form)数量的方法
2015/04/03 Javascript
手机开发必备技巧:javascript及CSS功能代码分享
2015/05/25 Javascript
BootStrapTable服务器分页实例解析
2016/12/20 Javascript
微信小程序中实现一对多发消息详解及实例代码
2017/02/14 Javascript
jQuery选择器之表单元素选择器详解
2017/09/19 jQuery
详谈commonjs模块与es6模块的区别
2017/10/18 Javascript
vue中使用refs定位dom出现undefined的解决方法
2017/12/21 Javascript
微信小程序实现人脸识别
2018/05/25 Javascript
WebGL three.js学习笔记之阴影与实现物体的动画效果
2019/04/25 Javascript
小程序实现锚点滑动效果
2019/09/23 Javascript
vue组件系列之TagsInput详解
2020/05/14 Javascript
[02:16]DOTA2超级联赛专访Burning 逆袭需要抓住机会
2013/06/24 DOTA
python 参数列表中的self 显式不等于冗余
2008/12/01 Python
python中查看变量内存地址的方法
2015/05/05 Python
pycharm执行python时,填写参数的方法
2018/10/29 Python
Python(PyS60)实现简单语音整点报时
2019/11/18 Python
python模拟点击网页按钮实现方法
2020/02/25 Python
使用Python实现将多表分批次从数据库导出到Excel
2020/05/15 Python
Scrapy+Selenium自动获取cookie爬取网易云音乐个人喜爱歌单
2021/02/01 Python
都柏林通行卡/城市通票:The Dublin Pass
2020/02/16 全球购物
Linux文件操作命令都有哪些
2016/07/23 面试题
高分子材料与工程专业推荐信
2013/12/01 职场文书
爱国主义演讲稿
2014/05/07 职场文书
群众路线剖析材料(四风问题)
2014/10/08 职场文书
KTV门卫岗位职责
2014/10/09 职场文书
电信营业员岗位职责
2015/04/14 职场文书
2016年教师学习廉政准则心得体会
2016/01/20 职场文书
PyMongo 查询数据的实现
2021/06/28 Python
详解Spring Bean的配置方式与实例化
2022/06/10 Java/Android