保存中文文本

本文详细介绍了Python中JSON数据的编码与解码方法,包括json.dumps与json.loads函数的使用方法及参数说明,并提供了实际示例。同时对比了Python 2与Python 3中字符类型的差异。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

SON 函数

使用 JSON 函数需要导入 json 库:import json

函数描述
json.dumps将 Python 对象编码成 JSON 字符串
json.loads将已编码的 JSON 字符串解码为 Python 对象

json.dumps

json.dumps 用于将 Python 对象编码成 JSON 字符串。

语法

json.dumps(obj, skipkeys=False, ensure_ascii=True,\ 
check_circular=True, allow_nan=True, cls=None, indent=None, \
separators=None, encoding="utf-8", default=None, sort_keys=False, **kw)
其中参数ensure_ascii=False,表示json.dumps转换python数据时禁用ascii编码格式,如果保存文本想为友好中文则禁用,
文本中出现其他编码格式的文本时可用上面图片中的两种方法,处理。

python 原始类型向 json 类型的转化对照表:


PythonJSON
dictobject
list, tuplearray
str, unicodestring
int, long, floatnumber
Truetrue
Falsefalse
Nonenull



json.loads


json.loads 用于解码 JSON 数据。该函数返回 Python 字段的数据类型。


语法


json.loads(s[, encoding[, cls[, \
object_hook[, parse_float[, parse_int[, parse_constant[, object_pairs_hook[, **kw]]]]]]]])

 

json 类型转换到 python 的类型对照表:

JSONPython
objectdict
arraylist
stringunicode
number (int)int, long
number (real)float
trueTrue
falseFalse
nullNone

JSON 函数


函数描述
encode将 Python 对象编码成 JSON 字符串
decode将已编码的 JSON 字符串解码为 Python 对象



encode


Python encode() 函数用于将 Python 对象编码成 JSON 字符串。


语法


demjson.encode(self, obj, nest_level=0)

实例


以下实例将数组编码为 JSON 格式数据:


#!/usr/bin/python
import demjson

data = [ { 'a' : 1, 'b' : 2, 'c' : 3, 'd' : 4, 'e' : 5 } ]

json = demjson.encode(data)
print json

以上代码执行结果为:


[{"a":1,"b":2,"c":3,"d":4,"e":5}]



decode


Python 可以使用 demjson.decode() 函数解码 JSON 数据。该函数返回 Python 字段的数据类型。


语法


demjson.decode(self, txt)

实例


以下实例展示了Python 如何解码 JSON 对象:


#!/usr/bin/python
import demjson

json = '{"a":1,"b":2,"c":3,"d":4,"e":5}';

text = demjson.decode(json)
print  text

以上代码执行结果为:


{u'a': 1, u'c': 3, u'b': 2, u'e': 5, u'd': 4}


二、编码对比

在 Python 中,不论是 Python2 还是 Python3 中,总体上说,字符都只有两大类:

  1. 通用的 Unicode 字符;
  2. (unicode 被编码后的)某种编码类型的字符,比如 UTF-8,GBK 等类型的字符。

Python2 中字符的类型:

  • str: 已经编码后的字节序列
  • unicode: 编码前的文本字符

Python3 中字符的类型:

  • str: 编码过的 unicode 文本字符
  • bytes: 编码前的字节序列

我们可以认为字符串有两种状态,即文本状态和字节(二进制)状态。Python2 和 Python3 中的两种字符类型都分别对应这两种状态,然后相互之间进行编解码转化。编码就是将字符串转换成字节码,涉及到字符串的内部表示;解码就是将字节码转换为字符串,将比特位显示成字符。

在 Python2 中,str 和 unicode 都有 encode 和 decode 方法。但是不建议对 str 使用 encode,对 unicode 使用 decode, 这是 Python2 设计上的缺陷。Python3 则进行了优化,str 只有一个 encode 方法将字符串转化为一个字节码,而且 bytes 也只有一个 decode 方法将字节码转化为一个文本字符串。

Python2 的 str 和 unicode 都是 basestring 的子类,所以两者可以直接进行拼接操作。而 Python3 中的 bytes 和 str 是两个独立的类型,两者不能进行拼接。

Python2 中,普通的,用引号括起来的字符,就是 str;此时字符串的编码类型,对应着你的 Python 文件本身保存为何种编码有关,最常见的 Windows 平台中,默认用的是 GBK。Python3 中,被单引号或双引号括起来的字符串,就已经是 Unicode 类型的 str 了。

 

 

转载于:https://www.cnblogs.com/ghming/p/9433974.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值