zoukankan      html  css  js  c++  java
  • Python JSON模块

    JSON 的基础知识

    JSON 的全称是 JavaScript Object Notation,即 JavaScript 对象符号,它是一种轻量级的数据交换格式。JSON 的数据格式既适合人来读写,也适合计算机本身解析和生成。最早的时候,JSON 是 JavaScript 语言的数据交换格式,后来慢慢发展成一种语言无关的数据交换格式,这一点非常类似于 XML。

    JSON 主要在类似于C 的编程语言中广泛使用,这些语言包括 C、C++C#、Java、JavaScript、Perl、Python 等。JSON 提供了多种语言之间完成数据交换的能力,因此,JSON 也是一种非常理想的数据交换格式。

    Python JSON 模块

    json 模块提供了对 JSON 的支持,它既包含了将 JSON 字符串恢复成 Python 对象的函数,也提供了将 Python 对象转换成 JSON 字符串的函数。

    当程序把 JSON 对象换成 Python 对象时,转换关系如表 1所示:

    表1 JSON 类型转换Python 类型的对应关系
    JSON 类型Python 类型
    对象(object) 字典(dict)
    数组(array) 列表(list)
    字符串(string) 字符串(str)
    整数(number(int))  整数(int)
    实数(number(real)) 浮点数(float)
    true True
    false False
    null  None

    当程序把 Python 对象转换成 JSON 格式字符串时,转换关系如表2所示:

    表 2 Python 类型转换 JSON 类型的对应关系
    Python 类型JSON 类型
    字典(dict) 对象(object)
    列表(list)和元组(tuple) 数组(array)
    字符串(str) 字符串(string)
    整型、浮点数(float,int) 数值型(number)
    True true
    False false
    None null

    序列化和反序列化

    要知道JSON的应用场景,先要了解两个概念,即序列化和反序列化。什么是序列化,什么是反序列化呢?

    举个栗子,很多人在玩王者荣耀游戏的时候,团战正激烈进行中,突然有急事要处理,如果不及时处理的话会产生一系列麻烦的后果。那怎么办呢?这时候玩家通常会选择挂起。游戏挂起,相当于把当时的状态保存在一个文件里,并把该文件保存到硬盘里,而这个过程就称为序列化。等你完事后回来,取消挂起继续游戏,就相当于把早先保存在硬盘里的文件数据提取了出来,这个过程就是反序列化。

    可见,序列化和反序列化的优点有两个:一是便于存储,一是便于传输

    1. 便于存储

        序列化过程将文本信息转变为二进制数据流。这样信息就容易存储在硬盘之中,当需要读取文件的时候,从硬盘中读取数据,再将其反序列化便可以得到原始的数据。

    2. 便于传输

        当两个进程在进行远程通信时,彼此可以发送各种类型的数据。无论何种类型的数据,都会以二进制序列的形式在网络上传送。

    JSON函数的应用场景

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

    函数

    描述

    json.dumps

    将 Python 对象编码成 JSON 字符串,即把dict类型的数据转换成str类型

    json.dump

    将Python 对象编码成 JSON 字符串(即把dict类型的数据转成str),并写入到json文件中

    json.loads

    将已编码的 JSON 字符串解码为 Python 对象,即把str类型的数据转换成dict类型

    json.load

    从已编码的 JSON 文件中读取数据并反序列化

    json.dumps

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

    # 简单编码,将dict类型的数据转成str
    print(json.dumps(['foo', {'bar': ('baz', None, 1.0, 2)}]))    
    # ["foo", {"bar": ["baz", null, 1.0, 2]}]
    

    # 参数sort_keys=True可以将字典排序 print(json.dumps({"c": 0, "b": 0, "a": 0}, sort_keys=True)) # {"a": 0, "b": 0, "c": 0}

    # 参数separators=('','')可以自定义分隔符 print(json.dumps([1,2,3,{'4': 5, '6': 7}], sort_keys=True, separators=(',',':'))) # [1,2,3,{"4":5,"6":7}]

    # 参数indent可以增加缩进,增强可读性,但缩进空格会使数据变大 print(json.dumps({'4': 5, '6': 7}, sort_keys=True,indent=2, separators=(',', ': '))) # { # "4": 5, # "6": 7 # }
    # 参数skipkeys可以忽略非str类型的key。dumps方法存储dict对象时,key必须是str类型,如果出现了其他类型则会抛出TypeError异常,如果开启该参数并设为True,会忽略这个key。 data = {'a':1,(1,2):123} print(json.dumps(data,skipkeys=True)) #{"a": 1}

    json.dump

    json.dump 用于将Python 对象编码成 JSON 字符串(即把dict类型的数据转成str),并写入到json文件中。

     

     将dict类型对象序列化并保存到文件:

    1 import json
    2 
    3 info = {
    4     'name':'alex',
    5     'age':'22'
    6 }
    7 
    8 with open('test.test',"w") as f:
    9     json.dump(info,f)

    执行代码后,test.test文件内容数据如下:

    {"name": "alex", "age": "22"}

    json.loads

     

    json.loads 将已编码的 JSON 字符串解码为 Python 对象。

     

    1 import json
    2 
    3 obj = ['foo', {'bar': ('baz', None, 1.0, 2)}]
    4 a = json.dumps(obj)         # 先序列化
    5 print(a)
    6 # ["foo", {"bar": ["baz", null, 1.0, 2]}]   # JSON 类型
    7 
    8 print(json.loads(a))        # 再反序列化
    9 # ['foo', {'bar': ['baz', None, 1.0, 2]}]    # Python 类型

     

     

    json.load

     

    json.loads 用于从已编码的 JSON 文件中读取数据并反序列化。

     

    import json
    
    f = open("test.test","r")
    data= json.load(f)
    print(data)               # {'name': 'alex', 'age': '22'}
    print(type(data))         # <class 'dict'>
    
    # 索引字典中指定key对应的value
    print(data['age'])        # 22

    -END-

  • 相关阅读:
    Spring +quartz获取ApplicationContext上下文
    开源 java CMS
    js实现页面跳转的几种方式
    hdu-4089-Activation-概率dp
    linux 内核定时器
    linux 短延时
    linux 基于 jiffy 的超时
    linux 让出处理器
    linux 延后执行
    linux获知当前时间
  • 原文地址:https://www.cnblogs.com/wujiaqing/p/10766811.html
Copyright © 2011-2022 走看看