0%

Python笔记--JSON数据编解码及格式化

JSON数据在传输的时候需要先进行编解码。在python语言中常用标准库中的json库进行编解码工作,json可以方便的将JSON字符串解码成python中的基本数据类型,也可以将基本数据类型编码成JSON字符串进行传输,非常方便使用。

编码

编码通过 dump 和 dumps 两个函数可以编码。

dump

将基本的数据类型编码为JSON字符串。

函数声明

1
2
3
def dump(obj, skipkeys=False, ensure_ascii=True, check_circular=True,
allow_nan=True, cls=None, indent=None, separators=None,
default=None, sort_keys=False, **kw)

常用参数

  • skipkeys: 默认值是False,如果dict的keys内的数据不是python的基本类型,设置为False时,就会报TypeError的错误。此时设置成True,则会跳过这类key
  • ensure_ascii:默认值True,如果dict内含有non-ASCII的字符,则会类似\uXXXX的显示数据,设置成False后,就能正常显示
  • indent:应该是一个非负的整型,如果是0,或者为空,则一行显示数据,否则会换行且按照indent的数量显示前面的空白
  • separators:分隔符,实际上是(item_separator, dict_separator)的一个元组,默认的就是(‘,’,’:’);这表示dictionary内keys之间用“,”隔开,而KEY和value之间用“:”隔开。
  • sort_keys:将数据根据keys的值进行排序。

例子1

1
2
3
4
5
import json

dic1 = {'name': "Paris", 'population': 2243}
json_dic = json.dump(dic1,sort_keys=True,indent =4,separators=(',', ': '),ensure_ascii=True )
print (json_dic)

打印输出如下:

1
2
3
4
{
"name": "Paris",
"population": 2243
}

dumps

dumps 将基本数据类型输出到一个文件中。

dumps的函数声明

1
2
3
def dumps(obj, fp, skipkeys=False, ensure_ascii=True, check_circular=True,
allow_nan=True, cls=None, indent=None, separators=None,
default=None, sort_keys=False, **kw)

例子2

1
2
3
4
fp = open('a.json', 'w')

dic1 = {'name': "Paris", 'population': 2243}
json_dic2 = json.dump(dic1,fp,sort_keys=True,indent =4,separators=(',', ': '),ensure_ascii=True )

a.json 文件内容如下:

1
2
3
4
{
"name": "Paris",
"population": 2243
}

解码

json的解码主要有 load 和 loads 两个函数来完成

load

load 函数声明

1
2
def load(s, encoding=None, cls=None, object_hook=None, parse_float=None,
parse_int=None, parse_constant=None, object_pairs_hook=None, **kw)

例子3

1
2
3
dic1 = """{"name": "Paris", "population": 2243}"""
info = json.load(dic1)
print(info)

输出为:

1
2
3
4
{
'name': 'Paris',
'population': 2243
}

loads

loads 从一个文件中读入JSON字符串并将字符串解码为基本数据类型。

1
2
3
4
fp = open('a.json', 'r',encoding='utf-8')

info = json.load(fp)
print(info)

输出为:

1
{'name': 'Paris', 'population': 2243}

格式化主要是 dumps 的时候的参数配置。