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 返回汉字的汉语拼音
Feb 27 Python
python遍历文件夹并删除特定格式文件的示例
Mar 05 Python
Python中字符串对齐方法介绍
May 21 Python
Python进程间通信Queue实例解析
Jan 25 Python
Python中一行和多行import模块问题
Apr 01 Python
python检测空间储存剩余大小和指定文件夹内存占用的实例
Jun 11 Python
python3使用matplotlib绘制散点图
Mar 19 Python
pandas 层次化索引的实现方法
Jul 06 Python
pandas DataFrame的修改方法(值、列、索引)
Aug 02 Python
jupyter notebook 的工作空间设置操作
Apr 20 Python
5 分钟读懂Python 中的 Hook 钩子函数
Dec 09 Python
对pytorch中x = x.view(x.size(0), -1) 的理解说明
Mar 03 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
国内咖啡文化
2021/03/03 咖啡文化
PHP中ob_start函数的使用说明
2013/11/11 PHP
跟我学Laravel之配置Laravel
2014/10/15 PHP
jquery下onpropertychange事件的绑定方法
2010/08/01 Javascript
JS读取cookies信息(记录用户名)
2012/01/10 Javascript
Jquery中&quot;$(document).ready(function(){ })&quot;函数的使用详解
2013/12/30 Javascript
通过location.replace禁止浏览器后退防止重复提交
2014/09/04 Javascript
JavaScript动态改变div属性的实现方法
2015/07/22 Javascript
js仿百度切换皮肤功能(html+css)
2016/07/10 Javascript
js获取Get值的方法
2016/09/29 Javascript
angular2模块和共享模块详解
2018/04/08 Javascript
如何利用vue+vue-router+elementUI实现简易通讯录
2019/05/13 Javascript
对layui中table组件工具栏的使用详解
2019/09/19 Javascript
在JavaScript中实现链式调用的实现
2019/12/24 Javascript
JavaScript实现点击切换验证码及校验
2021/01/10 Javascript
[30:51]DOTA2上海特级锦标赛主赛事日 - 3 胜者组第二轮#1Liquid VS MVP.Phx第一局
2016/03/04 DOTA
sqlalchemy对象转dict的示例
2014/04/22 Python
Python检测字符串中是否包含某字符集合中的字符
2015/05/21 Python
Python实现统计单词出现的个数
2015/05/28 Python
Python探索之爬取电商售卖信息代码示例
2017/10/27 Python
python+opencv实现动态物体追踪
2018/01/09 Python
使用Python微信库itchat获得好友和群组已撤回的消息
2018/06/24 Python
对Python实现累加函数的方法详解
2019/01/23 Python
Pandas之MultiIndex对象的示例详解
2019/06/25 Python
使用Python爬虫库requests发送表单数据和JSON数据
2020/01/25 Python
介绍一下#error预处理
2015/09/25 面试题
Linux文件操作命令都有哪些
2015/02/27 面试题
英语专业学生个人求职信
2014/01/28 职场文书
我的小天地教学反思
2014/04/30 职场文书
建筑工程质量通病防治方案
2014/06/08 职场文书
2015年乡镇科普工作总结
2015/05/13 职场文书
2015年秋学期师德师风建设工作总结
2015/10/23 职场文书
六一儿童节致辞稿(3篇)
2019/07/11 职场文书
优秀创业计划书分享
2019/07/19 职场文书
Django路由层如何获取正确的url
2021/07/15 Python
python实现局部图像放大
2021/11/17 Python