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 相关文章推荐
Windows下python2.7.8安装图文教程
May 26 Python
Python入门_学会创建并调用函数的方法
May 16 Python
解决python删除文件的权限错误问题
Apr 24 Python
python利用pandas将excel文件转换为txt文件的方法
Oct 23 Python
python tkinter窗口最大化的实现
Jul 15 Python
python中读入二维csv格式的表格方法详解(以元组/列表形式表示)
Apr 24 Python
python 实现两个npy档案合并
Jul 01 Python
大数据分析用java还是Python
Jul 06 Python
Python中bisect的用法及示例详解
Jul 20 Python
python学习笔记之多进程
Aug 06 Python
Kmeans均值聚类算法原理以及Python如何实现
Sep 26 Python
python基础学习之递归函数知识总结
May 26 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学习之简单计算器实现代码
2011/06/09 PHP
利用PHP扩展vld查看PHP opcode操作步骤
2013/03/04 PHP
使用PHPExcel操作Excel用法实例分析
2015/03/26 PHP
PHP实现二叉树的深度优先与广度优先遍历方法
2015/09/28 PHP
javascript之更有效率的字符串替换
2008/08/02 Javascript
Javascript document.referrer判断访客来源网址
2020/05/15 Javascript
JS动态创建DOM元素的方法
2015/06/09 Javascript
Node.js实用代码段之正确拼接Buffer
2016/03/17 Javascript
jQuery常见的选择器及用法介绍
2016/12/20 Javascript
ES6(ECMAScript 6)新特性之模板字符串用法分析
2017/04/01 Javascript
jQuery实现的下雪动画效果示例【附源码下载】
2018/02/02 jQuery
vue-star评星组件开发实例
2018/03/01 Javascript
vue和webpack安装命令详解
2018/06/15 Javascript
JavaScript常见JSON操作实例分析
2018/08/08 Javascript
webpack4 处理CSS的方法示例
2018/09/03 Javascript
微信小程序webview实现长按点击识别二维码功能示例
2019/01/24 Javascript
layui 富文本图片上传接口与普通按钮 文件上传接口的例子
2019/09/23 Javascript
JS如何实现封装列表右滑动删除收藏按钮
2020/07/23 Javascript
原生JavaScript实现拖动校验功能
2020/09/29 Javascript
Python使用poplib模块和smtplib模块收发电子邮件的教程
2016/07/02 Python
python用户评论标签匹配的解决方法
2018/05/31 Python
Python3中的bytes和str类型详解
2019/05/02 Python
python代码如何注释
2020/06/01 Python
Python爬虫之爬取淘女郎照片示例详解
2020/07/28 Python
python selenium 获取接口数据的实现
2020/12/07 Python
小程序canvas中文字设置居中锚点
2019/04/16 HTML / CSS
HTML5中input输入框默认提示文字向左向右移动的示例代码
2020/09/10 HTML / CSS
找到您丢失的钥匙、钱包和手机:Tile
2017/05/19 全球购物
SQL里面IN比较快还是EXISTS比较快
2012/07/19 面试题
师范应届毕业生自荐信
2013/11/18 职场文书
工作人员思想汇报
2014/01/09 职场文书
《一个中国孩子的呼声》教学反思
2014/02/12 职场文书
2014年乡镇民政工作总结
2014/12/02 职场文书
解除劳动合同通知书范本
2015/04/16 职场文书
Golang 如何实现函数的任意类型传参
2021/04/29 Golang
《巫师》是美食游戏?CDPR10月将推出《巫师》官方食谱
2022/04/03 其他游戏