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 相关文章推荐
c++生成dll使用python调用dll的方法
Jan 20 Python
python处理json数据中的中文
Mar 06 Python
详解Python中的装饰器、闭包和functools的教程
Apr 02 Python
使用Python的Bottle框架写一个简单的服务接口的示例
Aug 25 Python
Python自动化运维和部署项目工具Fabric使用实例
Sep 18 Python
python爬虫框架scrapy实战之爬取京东商城进阶篇
Apr 24 Python
利用django-suit模板添加自定义的菜单、页面及设置访问权限
Jul 13 Python
对python打乱数据集中X,y标签对的方法详解
Dec 14 Python
对python For 循环的三种遍历方式解析
Feb 01 Python
Python pandas.DataFrame调整列顺序及修改index名的方法
Jun 21 Python
python matplotlib中的subplot函数使用详解
Jan 19 Python
python实现的人脸识别打卡系统
May 08 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 正则表达式之正则处理函数小结(preg_match,preg_match_all,preg_replace,preg_split)
2012/10/05 PHP
解析yii数据库的增删查改
2013/06/20 PHP
php基于mcrypt的加密解密实例
2014/10/27 PHP
php提交表单发送邮件的方法
2015/03/20 PHP
php如何实现只替换一次或N次
2015/10/29 PHP
PHP中each与list用法分析
2016/01/08 PHP
jquery.lazyload  实现图片延迟加载jquery插件
2010/02/06 Javascript
onkeyup,onkeydown和onkeypress的区别介绍
2013/10/21 Javascript
Javascript Ajax异步读取RSS文档具体实现
2013/12/12 Javascript
js select option对象小结
2013/12/20 Javascript
JS基于for语句编写的九九乘法表示例
2018/01/04 Javascript
vue-router history模式下的微信分享小结
2018/07/05 Javascript
layui实现文件或图片上传记录
2018/08/28 Javascript
JS实现根据详细地址获取经纬度功能示例
2019/04/16 Javascript
解决echarts中横坐标值显示不全(自动隐藏)问题
2020/07/20 Javascript
Python使用剪切板的方法
2017/06/06 Python
详解Numpy中的广播原则/机制
2018/09/20 Python
如何基于python生成list的所有的子集
2019/11/11 Python
浅谈Python3多线程之间的执行顺序问题
2020/05/02 Python
如何创建一个Flask项目并进行简单配置
2020/11/18 Python
使用html5 canvas 画时钟代码实例分享
2015/11/11 HTML / CSS
移动端Html5页面生成图片解决方案
2018/08/07 HTML / CSS
阿迪达斯芬兰官方网站:adidas芬兰
2017/01/30 全球购物
Agoda香港:全球特价酒店预订
2017/05/07 全球购物
PHP面试题-$message和$$message的区别
2015/12/08 面试题
幼儿园春游活动方案
2014/01/19 职场文书
日本语毕业生自荐信
2014/02/01 职场文书
家长评语和期望
2014/02/10 职场文书
数控专业自荐书范文
2014/03/16 职场文书
股东协议书
2014/04/14 职场文书
2015年秘书个人工作总结
2015/04/25 职场文书
个人工作违纪检讨书
2015/05/05 职场文书
小学教师教学随笔
2015/08/14 职场文书
MySQL 用 limit 为什么会影响性能
2021/09/15 MySQL
vue 自定义的组件绑定点击事件
2022/04/21 Vue.js
css弧边选项卡的项目实践
2023/05/07 HTML / CSS