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进阶教程之函数参数的多种传递方法
Aug 30 Python
Python实现国外赌场热门游戏Craps(双骰子)
Mar 31 Python
讲解Python中的递归函数
Apr 27 Python
Python中函数eval和ast.literal_eval的区别详解
Aug 10 Python
Python使用matplotlib实现基础绘图功能示例
Jul 03 Python
对Python中for复合语句的使用示例讲解
Nov 01 Python
Python简单I/O操作示例
Mar 18 Python
对django2.0 关联表的必填on_delete参数的含义解析
Aug 09 Python
深入浅析python变量加逗号,的含义
Feb 22 Python
python with语句的原理与用法详解
Mar 30 Python
Python figure参数及subplot子图绘制代码
Apr 18 Python
Python实现仿射密码的思路详解
Apr 23 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中source #N问题的解决方法
2014/01/27 PHP
PHP把JPEG图片转换成Progressive JPEG的方法
2014/06/30 PHP
php跨站攻击实例分析
2014/10/28 PHP
PHP使用正则表达式获取微博中的话题和对象名
2015/07/18 PHP
详解配置 Apache 服务器支持 PHP 文件的解析
2017/02/15 PHP
js内置对象 学习笔记
2011/08/01 Javascript
使用jQuery管理选择结果
2015/01/20 Javascript
javascript实现行拖动的方法
2015/05/27 Javascript
基于BootStrap Metronic开发框架经验小结【二】列表分页处理和插件JSTree的使用
2016/05/12 Javascript
ajax与json 获取数据并在前台使用简单实例
2017/01/19 Javascript
详解基于Bootstrap+angular的一个豆瓣电影app
2017/06/26 Javascript
使用vue实现简单键盘的示例(支持移动端和pc端)
2017/12/25 Javascript
vue使用Element组件时v-for循环里的表单项验证方法
2018/06/28 Javascript
Angular 利用路由跳转到指定页面的指定位置方法
2018/08/31 Javascript
js实现同一个页面,多个enter事件绑定的示例
2018/10/10 Javascript
JS实现的贪吃蛇游戏完整实例
2019/01/18 Javascript
js+canvas实现五子棋小游戏
2020/08/02 Javascript
深入浅析Python2.x和3.x版本的主要区别
2018/11/30 Python
selenium中get_cookies()和add_cookie()的用法详解
2020/01/06 Python
Python如何把Spark数据写入ElasticSearch
2020/04/18 Python
python连接mysql数据库并读取数据的实现
2020/09/25 Python
浅析python 字典嵌套
2020/09/29 Python
System.Array.CopyTo()和System.Array.Clone()有什么区别
2016/06/20 面试题
Ajxa常见问题都有哪些
2014/03/26 面试题
计算机应用专业推荐信
2013/11/13 职场文书
幼儿园保教管理制度
2014/02/03 职场文书
超市重阳节活动方案
2014/02/10 职场文书
小学模范班主任事迹材料
2014/05/13 职场文书
婚纱店策划方案
2014/05/22 职场文书
感谢信怎么写
2015/01/21 职场文书
初中运动会前导词
2015/07/20 职场文书
民间借贷纠纷答辩状
2015/08/03 职场文书
Django显示可视化图表的实践
2021/05/10 Python
详解Redis集群搭建的三种方式
2021/05/31 Redis
Mysql分库分表之后主键处理的几种方法
2022/02/15 MySQL
css3属性选择器 “~”(波浪号) “,”(逗号) “+”(加号)和 “>”(大于号)
2022/04/19 HTML / CSS