1.JSON

Json是一种轻量级的数据交换格式。Json源自JavaScript语言,易于人类的阅读和编写,同时也易于机器解析和生成,是目前应用最广泛的数据交换格式。

数据交换格式是不同平台、语言中进行数据传递的通用格式。比如Python和Java之间要对话,你直接传递给Java一个dict或list吗?Java会问,这是什么鬼?虽然它也有字典和列表数据类型,但两种字典不是一个“物种”,根本无法相互理解。这个时候就需要用Json这种交换格式了,Python和Java都能理解Json。那么别的语言为什么能理解Json呢?因为这些语言都内置或提供了Json处理模块,比如Python的json模块。(额外强调一点,在Python中json是全部小写的,包括模块和方法名。)

Json是跨语言,跨平台的,但只能对Python的基本数据类型做操作,对Python的类就无能为力。JSON格式和Python中的字典非常像。但是,json的数据要求用双引号将字符串引起来,并且不能有多余的逗号。这是因为在别的语言中,双引号引起来的才是字符串,单引号引起来的是字符;Python程序员习惯性的在列表、元组或字典的最后一个元素的后面加个逗号,这在json中是不允许的,需要特别注意。

2.JSON语法

  • 对象表示为键值对
  • 数据由逗号分隔
  • 花括号保存对象
  • 方括号保存数组

怎么表示对象 对象以一对花括号包含,里面包含键值对,如 {"a":1, "b": "1"} ,这样子,键值必须以双引号括起来,数据之前以逗号分隔

怎么表示数组 数组以一对方括号包含,如 [1, 2, "2, {"a": 1}] 这样子

JSON对象和JSON字符串 JSON对象比较像python里的字典,但还是有区别的,JSON对象里的字符串只能用双引号,python可以用单引号,JSON对象里只能包括基础数据类型,即数字(包含小数)、字符串、数组、字典、空值,但python字典可以包含其它对象,下面定义一个JSON对象:

{
    "key1": 1,
    "key2": "1",
    "key3": [1, "1"],
    "key4": {
        "key5": 1
    }
}

JSON字符串是将JSON序列化后的字符串,将上面的JSON对象序列化后为:

'{"key3": [1, "1"], "key2": "1", "key1": 1, "key4": {"key5": 1}}'

3.在python中使用json

python标准库中自带json模块,可以序列化(将python数据转换为json)和反序列化(将json转换为python)json,

使用方法

json模块的使用其实很简单,对于绝大多数场合下,我们只需要使用下面四个方法就可以了:

方法 功能
json.dump(obj, fp) 将python数据类型转换并保存到json格式的文件内。
json.dumps(obj) 将python数据类型转换为json格式的字符串。
json.load(fp) 从json格式的文件中读取数据并转换为python的类型。
json.loads(s) 将json格式的字符串转换为python的类型。

序列化JSON:

import json

raw_json = {
        "key1": 1,
        "key2": "1",
        "key3": [1, "1"],
        "key4": {
            "key5": 1
        }
    }

json_str = json.dumps(raw_json)
print(repr(json_str))

输入为:

'{"key3": [1, "1"], "key2": "1", "key1": 1, "key4": {"key5": 1}}'

 

反序列化JSON:

import json

raw_json = {
        "key1": 1,
        "key2": "1",
        "key3": [1, "1"],
        "key4": {
            "key5": 1
        }
    }

json_str = '{"key3": [1, "1"], "key2": "1", "key1": 1, "key4": {"key5": 1}}'
raw_json = json.loads(json_str)
print(raw_json)

输出结果为:

{u'key3': [1, u'1'], u'key2': u'1', u'key1': 1, u'key4': {u'key5': 1}}
要转化成json就‘dump’,要从json转化成Python就‘load’;要根据字符串转化就加‘s’,要从文件进行转化就不加‘s’。
import json

a = 'rt'
c = json.dumps(a)

需要注意的是json模块不支持bytes类型,要先将bytes转换为str格式。

import json

#bytes
b = b'liming'

#将bytes转换为str k = json.dumps(b.decode()) print(k)