文档章节

Python:json库中的编码问题

樂天
 樂天
发布于 2014/05/30 10:07
字数 507
阅读 91
收藏 0
https://docs.python.org/2/library/json.html下有一个默认的转换表:


#-*-encoding:utf-8-*-
import json

d = {'info':'你好,world', 'isChecked':True}
print d
j = json.dumps(d)
print j


输出为:

{'info': '\xe4\xbd\xa0\xe5\xa5\xbd,world', 'isChecked': True}
{"info": "\u4f60\u597d,world", "isChecked": true}

第一行输出字典变量d时,"你好"显示为utf-8编码,第二行输出中"你好"显示为unicode编码。第二行输出是一个字符串,所以肯定是希望其输出“正常点”,于是可以这样做:

#-*-encoding:utf-8-*-
import json

d = {'info':'你好,world', 'isChecked':True}
print d
j = json.dumps(d, ensure_ascii=False)
print j
运行后输出如下:
{'info': '\xe4\xbd\xa0\xe5\xa5\xbd,world', 'isChecked': True}
{"info": "你好,world", "isChecked": true}
好了,正常了。

然后试一下将json字符串转换为python对象:
#-*-encoding:utf-8-*-
import json

d = {'info':'你好,world', 'isChecked':True}
print d
j = json.dumps(d, ensure_ascii=False)
print j

d2 = json.loads(j) ##或者d2 = json.loads(j, encoding='utf-8') 
print d2
注意,如果字符串j编码不是utf-8或者unicode,用在loads函数中encoding指定j的编码。
输出如下:
{'info': '\xe4\xbd\xa0\xe5\xa5\xbd,world', 'isChecked': True}
{"info": "你好,world", "isChecked": true}
{u'info': u'\u4f60\u597d,world', u'isChecked': True}


d2是转换后的字典,可以看到"你好"被转换成了unicode形式,而非utf-8,同时连“键”也被转换为了unicode。

由json字符串转换为python对象,处理python对象时候要注意编码问题,比如:

#-*-encoding:utf-8-*-
import json

d = {'info':'你好,world', 'isChecked':True, '姓名':'樂天'}
print d
j = json.dumps(d, ensure_ascii=False)
print j

d2 = json.loads(unicode(j))     
print d2
print d2['info'] # 正常
print d2[u'info']  # 正常
print d2['姓名']  # 报错
print d2[u'姓名']  # 正常




如果要把"你好"转换为utf-8,可以这样做:
d2['info'] = d2['info'].encode('utf-8')
print d2


输出结果是:
{u'info': '\xe4\xbd\xa0\xe5\xa5\xbd,world', u'isChecked': True}


可惜还和最初的样子不一样。

其中一个解决方法是自己写一个递归函数将这个完全unicode化的dict转换为utf8形式。
另外一种就是将就着用,键不推荐使用非ASCII字符。





© 著作权归作者所有

共有 人打赏支持
樂天
粉丝 138
博文 674
码字总数 147858
作品 3
深圳
程序员
私信 提问
数据提取之JSON与JsonPATH

JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式,它使得人们很容易的进行阅读和编写。同时也方便了机器进行解析和生成。适用于进行数据交互的场景,比如网站前台与后台之间的...

张元江_erel
2018/11/28
0
0
python处理json数据中文

(python http://www.jbxue.com/jb/python)处理json数据中的中文问题。 python中自带了处理python的模块,使用时候直接import json即可。 使用loads方法即可将json字符串转换成python对象,对...

mysoftsky
2014/03/06
0
0
python序列化数据本地存放

深入# 序列化的概念很简单。内存里面有一个数据结构,你希望将它保存下来,重 用,或者发送给其他人。你会怎么做?嗯, 这取决于你想要怎么保存,怎么重用,发送给谁。很多游戏允许你在退出的...

临峰不畏
2015/01/18
0
0
python数据存储--JSON

HTML正文存储为两种格式:JSON和CSV。 存储为JSON: 首先利用Requests访问http://seputu.com获取HTML文档: 取每章节 接下来将数据存储为JSON。 python对JSON文件的操作分为编码和解码,通过...

guguobao
2018/08/21
0
0
Python 开发者的 6 个必备库

无论你是正在使用 Python 进行快速开发,还是在为 Python 桌面应用制作原生 UI ,或者是在优化现有的 Python 代码,以下这些 Python 项目都是应该使用的。 Python 凭借其易用的特点,已经被工...

oschina
2017/10/18
4.1K
8

没有更多内容

加载失败,请刷新页面

加载更多

Linux Wireshark普通用户启动使用方案

当系统安装好Wireshark后请正常启动是否可以进行正常使用,如果不行请参考下列指导 向系统添加一个用户组 sudo groupadd wireshark //如提示此组存在可跳过 将指定用户添加到这个组中 sudo...

CHONGCHEN
今天
2
0
CSS 选择器参考手册

CSS 选择器参考手册 选择器 描述 [attribute] 用于选取带有指定属性的元素。 [attribute=value] 用于选取带有指定属性和值的元素。 [attribute~=value] 用于选取属性值中包含指定词汇的元素。...

Jack088
今天
2
0
数据库篇一

数据库篇 第1章 数据库介绍 1.1 数据库概述  什么是数据库(DB:DataBase) 数据库就是存储数据的仓库,其本质是一个文件系统,数据按照特定的格式将数据存储起来,用户可以对数据库中的数据...

stars永恒
今天
4
0
Intellij IDEA中设置了jsp页面,但是在访问页面时却提示404

在Intellij IDEA中设置了spring boot的jsp页面,但是在访问时,却出现404,Not Found,经过查找资料后解决,步骤如下: 在Run/Debug Configurations面板中设置该程序的Working Directory选项...

uknow8692
昨天
4
0
day24:文档第五行增内容|每月1号压缩/etc/目录|过滤文本重复次数多的10个单词|人员分组|

1、在文本文档1.txt里第五行下面增加如下内容;两个方法; # This is a test file.# Test insert line into this file. 分析:给文档后增加内容,可以用sed 来搞定;也可以用while do done...

芬野de博客
昨天
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部