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 19 Python
在Python中处理列表之reverse()方法的使用教程
May 21 Python
Python爬豆瓣电影实例
Feb 23 Python
使用Python从零开始撸一个区块链
Mar 14 Python
Flask框架通过Flask_login实现用户登录功能示例
Jul 17 Python
python笔记_将循环内容在一行输出的方法
Aug 08 Python
Django实现将views.py中的数据传递到前端html页面,并展示
Mar 16 Python
使用卷积神经网络(CNN)做人脸识别的示例代码
Mar 27 Python
django inspectdb 操作已有数据库数据的使用步骤
Feb 07 Python
python树莓派通过队列实现进程交互的程序分析
Jul 04 Python
在Python 中将类对象序列化为JSON
Apr 06 Python
Python万能模板案例之matplotlib绘制甘特图
Apr 13 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
IIS环境下快速安装、配置和调试PHP5.2.0
2006/12/17 PHP
PHP 伪静态隐藏传递参数名的四种方法
2010/02/22 PHP
基于PHP读取csv文件内容的详解
2013/06/18 PHP
浅谈PHP各环境下的伪静态配置
2019/03/13 PHP
Nigma vs AM BO3 第二场2.13
2021/03/10 DOTA
CSS和JS标签style属性对照表(方便js开发的朋友)
2010/11/11 Javascript
JavaScript中双叹号(!!)作用示例介绍
2014/04/10 Javascript
jquery text()方法取标签中的文本
2014/07/25 Javascript
Jquery对select的增、删、改、查操作
2015/02/06 Javascript
js实现感应鼠标图片透明度变化的方法
2015/02/20 Javascript
在JavaScript的正则表达式中使用exec()方法
2015/06/16 Javascript
深入php面向对象、模式与实践
2016/02/16 Javascript
浅析angularJS中的ui-router和ng-grid模块
2016/05/20 Javascript
js获取iframe中的window对象的实现方法
2016/05/20 Javascript
JavaScript直播评论发弹幕切图功能点集合效果代码
2016/06/26 Javascript
JS原型链 详解及示例代码
2016/09/06 Javascript
Javascript中的async awai的用法
2017/05/17 Javascript
Angular实现搜索框及价格上下限功能
2018/01/19 Javascript
Vue中保存数据到磁盘文件的方法
2018/09/06 Javascript
js实现拾色器插件(ColorPicker)
2020/05/21 Javascript
微信小程序canvas动态时钟
2020/10/22 Javascript
使用Python中的tkinter模块作图的方法
2017/02/07 Python
基于腾讯云服务器部署微信小程序后台服务(Python+Django)
2019/05/08 Python
用Anaconda安装本地python包的方法及路径问题(图文)
2019/07/16 Python
python实现打砖块游戏
2020/02/25 Python
Python无头爬虫下载文件的实现
2020/04/02 Python
Python爬虫requests库多种用法实例
2020/05/28 Python
法国在线药房:1001Pharmacies
2021/03/07 全球购物
学习2014年全国两会心得体会
2014/03/12 职场文书
公司授权委托书格式范文
2014/10/02 职场文书
2015年新农村建设工作总结
2015/05/22 职场文书
2015入党个人自传范文
2015/06/26 职场文书
2015年庆祝国庆节66周年演讲稿
2015/07/30 职场文书
2016年圣诞节寄语(一句话)
2015/12/07 职场文书
2019年圣诞节祝福语集锦
2019/12/25 职场文书
Python基础之元类详解
2021/04/29 Python