Python学习笔记(6):JSON的编码和解码

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/K_Ohaha/article/details/79212134

简介

JSON是一种轻量级的数据交换格式,它具有格式简单,易于读写,易于解析等优点。wiki中是这样定义JSON的:

In computing, JavaScript Object Notation or JSON is an open-standard file format that uses human-readable text to transmit data objects consisting of attribute–value pairs and array data types (or any other serializable value). It is a very common data format used for asynchronous browser–server communication, including as a replacement for XML in some AJAX-style systems.
JSON is a language-independent data format. It was derived from JavaScript, but as of 2017 many programming languages include code to generate and parse JSON-format data. The official Internet media type for JSON is application/json. JSON filenames use the extension .json.

Encode过程

Encode是把Python对象转换成JSON对象的过程。Python对象和JSON对象类型对应规则如下:

Python JSON
dict object
list,tuple array
str,unicode string
int,long,float number
True true
False false
None null

常用方法有两个:dump和dumps。

dump函数参数说明
json.dump(obj, fp, 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)

dump函数将Python对象“obj”转换成JSON对象后写入文件fp,fp是一个可写文件对象。

  • 如果skipkeys为True,则跳过非基本类型的键值(str, unicode, int, long, float, bool, None),否则会抛出TypeError错误。
  • 如果ensure_ascii为True,所有的非ASCII字符都不能解析。
  • 如果check_circular为false,转换时不再检查循环引用,如果出现循环引用,则抛出OverflowError错误。
  • 如果allow_nan为false,当对象中有超出float范围的值时(nan, inf, -inf),会抛出ValueError错误。
  • 如果indent是非负数,则打印时会有相应的缩进;如果是0或者负数,则没有缩进。
  • 如果指定了separators,那么分隔符会使用指定的(item_separator, key_separator) ,默认为(‘, ‘, ‘: ‘)。
  • 如果指定了default,default应该是一个返回可解码的JSON或抛出TypeError错误的函数。
  • 如果sort_keys为true,则输出按键值的字典顺序排序。
dumps函数参数说明

dumps函数和dump函数的参数意义相同,唯一不同的是dumps函数输出结果是一个字符串。

Decode过程

Decode是把JSON对象转换成Python对象的过程。JSON对象和Python对象类型对应规则如下:

JSON Python
object dict
array list
string unicode
number(int) int,long
number(real) float
true True
false False
null None

常用方法有:load和loads,它们的区别与dump和dumps之间的区别相同。

load函数参数说明
json.load(fp[, encoding[, cls[, object_hook[, parse_float[, parse_int[, parse_constant[, object_pairs_hook[, **kw]]]]]]]])
  • fp必须是一个可读文件。
  • encoding是decode过程的编码格式。
  • object_hook是一个可选函数,如果解码结果为一个dict,则可以用object_hook代替dict
  • parse_float,parse_int,parse_constant都是类型转换方法。
loads函数参数说明
json.loads(s[, encoding[, cls[, object_hook[, parse_float[, parse_int[, parse_constant[, object_pairs_hook[, **kw]]]]]]]])

loads函数的参数意义与load相同。

第三方库Demjson

第三方库Demjson提供了encode和decode两个方法,用于JSON的编码和解码

猜你喜欢

转载自blog.csdn.net/K_Ohaha/article/details/79212134
今日推荐