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中对列表排序实例
Jan 04 Python
python实时分析日志的一个小脚本分享
May 07 Python
Python OpenCV对本地视频文件进行分帧保存的实例
Jan 08 Python
Django restframework 源码分析之认证详解
Feb 22 Python
Python2和Python3的共存和切换使用
Apr 12 Python
Python列表与元组的异同详解
Jul 02 Python
python提取xml里面的链接源码详解
Oct 15 Python
Python上下文管理器全实例详解
Nov 12 Python
python GUI库图形界面开发之PyQt5信号与槽多窗口数据传递详细使用方法与实例
Mar 08 Python
django 模版关闭转义方式
May 14 Python
在keras 中获取张量 tensor 的维度大小实例
Jun 10 Python
python 爬取京东指定商品评论并进行情感分析
May 27 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语法(2)
2006/10/09 PHP
超级好用的一个php上传图片类(随机名,缩略图,加水印)
2010/06/30 PHP
php上传大文件失败的原因及应对策略
2015/10/20 PHP
thinkphp中的url跳转用法分析
2016/07/12 PHP
PHP-FPM 的管理和配置详解
2019/02/17 PHP
详解PHP素材图片上传、下载功能
2019/04/12 PHP
js利用Array.splice实现Array的insert/remove
2009/01/13 Javascript
window.onload和$(function(){})的区别介绍
2013/10/30 Javascript
JavaScript中的alert()函数使用技巧详解
2014/12/29 Javascript
javascript中函数作为参数调用的方法
2015/02/09 Javascript
在ASP.NET MVC项目中使用RequireJS库的用法示例
2016/02/15 Javascript
浅谈使用splice函数对数组中的元素进行删除时的注意事项
2016/12/04 Javascript
完美实现js焦点轮播效果(一)
2017/03/07 Javascript
js实现年月日表单三级联动
2020/04/17 Javascript
详解webpack3编译兼容IE8的正确姿势
2017/12/21 Javascript
vue-router配合ElementUI实现导航的实例
2018/02/11 Javascript
微信小程序之裁剪图片成圆形的实现代码
2018/10/11 Javascript
基于canvas实现手写签名(vue)
2020/05/21 Javascript
JavaScript常用工具函数汇总(浏览器环境)
2020/09/17 Javascript
分析在Python中何种情况下需要使用断言
2015/04/01 Python
Python中单例模式总结
2018/02/20 Python
Python中将dataframe转换为字典的实例
2018/04/13 Python
matplotlib savefig 保存图片大小的实例
2018/05/24 Python
python 读取文件并替换字段的实例
2018/07/12 Python
python中round函数如何使用
2020/06/19 Python
基于HTML5+tracking.js实现刷脸支付功能
2020/04/16 HTML / CSS
俄罗斯外国汽车和国产汽车配件网上商店:Движком
2020/04/19 全球购物
关键字throw与throws的用法差异
2016/11/22 面试题
工商管理系学生的自我评价分享
2013/11/29 职场文书
办公室前台的岗位职责
2013/12/20 职场文书
机房搬迁方案
2014/05/01 职场文书
莫言诺贝尔获奖演讲稿
2014/05/21 职场文书
禁毒主题班会教案
2015/08/14 职场文书
祝福语集锦:送给毕业同学祝福语
2019/11/21 职场文书
手把手教你用SpringBoot将文件打包成zip存放或导出
2021/06/11 Java/Android
Java代码规范与质量检测插件SonarLint的使用
2022/08/05 Java/Android