当前位置:   article > 正文

《Python进阶系列》二十四:专门处理JOSN数据的JSON模块_python json持久化, 如何将元组存为小括号

python json持久化, 如何将元组存为小括号

JSON格式

JSON简介

JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,它是JavaScript的子集。JSON用来存储和交换文本信息,易于读写,占用带宽小,网络传输速度快的特性,适用于数据量大不要求保留原有类型的情况。

JSON格式通常是以键值对的方式呈现,其简洁和清晰的层次结构使得JSON成为理想的数据交换语言,而在Python中处理JSON格式的模块有两个,分别是jsonpickle。本文主要学习JSON模块。

JSON的语法规则:

  1. 名称必须用双引号括起来
  2. 值可以是双引号包括的字符串、数字、true、false、null、JavaScript数组,或子对象
  3. 数据在name/value中
  4. 数据见用逗号分隔
  5. 花括号保存对象
  6. 方括号保存数组

JSON模块

在JSON中有四个常用的方法,分别是:dumps(), dump(), loads(), load()。前两个方法将python的数据转换为json格式的字符串反序列化;后两个方法将json格式的字符串转换成python的数据类型。

在使用json这个模块前,首先要导入json库:import json

  • json.load():用于读取json格式的文件,将文件中的数据转换为字典类型;
  • json.dump():用于存入json格式的文件,将字典类型转换为json形式的字符串,无返回;
  • json.dumps():将python中的字典类型转换为字符串类型,返回json字符串;
  • json.loads():将json格式的字符串转换为字典类型的数据。

区别:load()dump()处理的主要是文件,序列化到文件或者从文件反序列化loads()dumps()处理的是字符串,都是内存操作不涉及持久化。
\quad

json.dump()

json.dump():用于存入json格式的文件,将字典类型转换为json形式的字符串,无返回。obj必传,表示待转换的文件,fp必传,表示文件对象。

def 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)
  • 1
  • 2

例子:写入文件有两种方法:

第一种方法:

file_text='{"name":"john","age":22,"sex":"man","address":"USA"}'
json.dump(file_text, open("json.file",'w'))
  • 1
  • 2

第二种方法:

file_text='{"name":"john","age":22,"sex":"man","address":"USA"}'
with open("json_file1", "w") as f:
    f.write(json.dumps(file_text))
    f.close()
  • 1
  • 2
  • 3
  • 4

\quad

json.load()

读取文件中json形式的字符串元素转化为Python类型。fp必选,表示文件对象。

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

参数详解:

  • fp: 文件描述符,将fp反序列化为Python对象。
  • object_hook: 默认值为None,object_hook是一个可选函数,此功能可用于实现自定义解码器。指定一个函数,该函数负责把反序列化后的基本类型对象转换成自定义类型的对象。
  • parse_float: 默认值为None,如果指定了parse_float,用来对JSON float字符串进行解码,这可用于为JSON浮点数使用另一种数据类型或解析器。
  • parse_int: 默认值为None,如果指定了parse_int,用来对JSON int字符串进行解码,这可以用于为JSON整数使用另一种数据类型或解析器。
  • parse_constant:默认值为None,如果指定了parse_constant,对-InfinityInfinityNaN字符串进行调用。如果遇到了无效的JSON符号,会引发异常。
  • 如果进行反序列化(解码)的数据不是一个有效的JSON文档,将会引发 JSONDecodeError异常。

例子:

with open("json_file1","r") as f:
    print(json.load(f))
  • 1
  • 2

\quad

json.loads()

json.loads() 用于解码 JSON 数据。该函数返回 Python 字段的数据类型。s必传,表示字符串。

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

参数详解:

  • s: 将s(包含JSON文档的str,bytes或bytearray实例)反序列化为Python对象。
  • encoding: 指定一个编码的格式。

loads也不需要文件描述符,其他参数的含义和load函数的一致。

例子:

>>> import json
>>> file_text='{"name":"john","age":22,"sex":"man","address":"USA"}'

>>> print(file_text)
'{"name":"john","age":22,"sex":"man","address":"USA"}'
>>> print(type(file_text))
str
>>> print(json.loads(file_text))
{'name': 'john', 'age': 22, 'sex': 'man', 'address': 'USA'}
>>> print(type(json.loads(file_text)))
<class 'dict'>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

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

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

\quad

json.dumps()

json.dumps() 用于将 Python 对象编码成 JSON 字符串。obj必传,表示文件对象。

def 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)
  • 1
  • 2

参数详解:

  • skipkeys: 如果为True的话,则只能是字典对象,否则会TypeError错误, 默认False
  • ensure_ascii: 确定是否为ASCII编码;
  • check_circular: 循环类型检查,如果为True的话;
  • allow_nan: 确定是否为允许的值;
  • indent: 会以美观的方式来打印,呈现,实现缩进;
  • separators: 对象分隔符,默认为;
  • encoding: 编码方式,默认为utf-8;
  • sort_keys: 如果是字典对象,选择True的话,会按照键的ASCII码来排序。

dump()相比,dump()只是多了一个fp参数。简单说就是dump()需要一个类似文件指针的参数(并不是真正的指针,可以称之为文件对象),与文件操作相结合,即先将Python文件对象转化为json字符串再保存在文件中。
例子:

>>> import json

>>> file_text={ "name":"john", "age":22, "sex":"man", "address":"USA" }
>>> file_text
{'name': 'john', 'age': 22, 'sex': 'man', 'address': 'USA'}
>>> type(file_text)
dict
>>> json.dumps(file_text)
'{"name": "john", "age": 22, "sex": "man", "address": "USA"}'
>>> type(json.dumps(file_text))
str
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

可以使用参数让 JSON 数据格式化输出:

>>> print(json.dumps(file_text, sort_keys=True, indent=4, separators=(',', ': ')))
{
    "address": "USA",
    "age": 22,
    "name": "john",
    "sex": "man"
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

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

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

参考

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Gausst松鼠会/article/detail/719928
推荐阅读
相关标签
  

闽ICP备14008679号