您好,欢迎来到我的小站,如果文章对您有帮助,欢迎 点赞、评论、转发!谢谢!

利用Python实现JSON格式数据的编码与解码操作

Python 泰泰 611℃ 0评论

导读

JSON (全称:JavaScript Object Notation )是一种轻量级的数据交换格式,所谓的轻量级,是与 XML 数据结构相比而言的,在描述相同的数据下,JSON 所需的字符比XML 的要少,这就意味着相同意义的数据, JSON 能更快完成传输,所需的流量也会减少,所以在移动互联网中JSON 数据格式会用的更多。

关于 JSON 数据完整概述,可直访: 官网 查看。

JSON 数据类型

JSON 是一种非常灵活,具有高度可定制化的数据格式,其一般由以下几种数据类型单一或混合组成:

  • number:整型数据;
  • boolean:布尔类型数据,true或false;
  • string:字符串数据;
  • null:null;
  • array:数组(Array),类似 Python 的列表 — [];
  • object:类似 Python 的字典数据 — { Object:value }。

其中,对象(object) 和 数组(array) 为比较特殊且常用的两种类型:

J
SON 对象

基本格式:

{“Object1”: "value1", “Object2”: "value2", ...}

JSON 对象数据格式与 Python字典类似,同样以键值对形式存在,外层使用大括号{}包裹,Object 为“键”,value 为对应的“值”,“键”与“值”之间用冒号:间隔,元素间用逗号,间隔,其中 Object 可用数字或字符串表示,value 可以是任意类型的数据,可以是数字、字符串、字典、数组等。

示例:

{
    "name": "taitai",
    "birthday": "2000-1-1",
    "hobby": "['basketball', 'football']",
    "score": "{'chinese': '88', 'math': '95', 'english': '82'}"
}

JSON 数组

基本格式:

["element1", "element2", ...]

JSON 数组与 Python 列表数据的格式类似,均是一连串的元素集合,在 JSON 数组一个较为特殊的数据类型,它也可以像对象那样使用键值对,但还是索引使用得多。同样,其值的类型可以是任意类型。
示例:

[{
        "name": "taitai",
        "birthday": "2000-1-1",
    },
    {
        "name": "taitai",
        "birthday": "2000-1-1",
    }
]

JSON 规定字符集必须为 UTF-8 编码。同时,为了统一解析,JSON 还规定 Object (键) 必须使用双引号""包裹,且当 value(值) 为字符串数据时,也必须用双引号""包裹。

JSON 编码 & 解码

在互联网中,如果需要传输对象数据,就需要先将该对象转化为 JSON 格式的字符串,这个过程称为“对象序列化(编码)”,反之,在接收到 JSON 字符串后,要转为目标对象使用时,就需要进行 “反序列化(解码)”,两者是互逆过程。

Python 数据与 JSON 数据映射关系

Python 数据 JSON 数据
整数、浮点数等数据类型 数字
字符串 字符串
布尔类型(True 、False) true、false
Null null
列表、元组 数组
字典 对象

JSON 编码

Python 提供了一个内置的 json 模块用于处理 Python数据 与 JSON数据 的相互转换操作。其中模块提供的 dumpsdump 方法用于将 Python 对象转换为 JSON 数据,即实现编码过程。

实例:

# coding=utf-8
import json

# 创建数据
data = {
    'name': 'taitai',
    'age': 18,
    'hobby': ['basketball', 'football'],
    'score': {'chinese': '88', 'math': '95', 'english': '82'}
}

print(data)
print(type(data))    # 编码前数据类型 <class 'dict'>

# dumps 编码(单行输出)
data2 = json.dumps(data)
print(data2)
print(type(data2))    # 编码后数据类型 <class 'str'>

# dumps 编码(排版输出,指定逐层跳格为 4)
data2 = json.dumps(data, indent=4)
print(data2)

# dump方法:将数据编码,并写入指定的文件
# 不排版
with open('./data2.json', 'w') as f:
    json.dump(data2, f)

# 排版
with open('./data3.json', 'w') as f:
    json.dump(data2, f, indent=4)

实例输出:

{'name': 'taitai', 'age': 18, 'hobby': ['basketball', 'football'], 'score': {'chinese': '88', 'math': '95', 'english': '82'}}
<class 'dict'>
{"name": "taitai", "age": 18, "hobby": ["basketball", "football"], "score": {"chinese": "88", "math": "95", "english": "82"}}
<class 'str'>
{
    "name": "taitai",
    "age": 18,
    "hobby": [
        "basketball",
        "football"
    ],
    "score": {
        "chinese": "88",
        "math": "95",
        "english": "82"
    }
}

同时还会在当前目录下创建 data2.json 和 data3.json 两个文件。

JSON 解码

上述实例实现了 JSON 的编码操作,前面也说了有编码就有解码,这是一个相互伴随的过程,json 模块同样提供了 loads()load() 方法实现 JSON 数据的解码操作。

实例:

# coding=utf-8
import json

# 创建数据
json_data = r'{"name": "taitai", "age": 18, "hobby": ["basketball", "football"], "score": {"chinese": "88", "math": "95", "english": "82"}}'

print("json_data 数据:", json_data)
print("json_data 数据类型:", type(json_data))    # <class 'str'>

# 解码
data = json.loads(json_data)
print("data 数据:", data)
print("data 数据类型:", type(data))    # <class 'dict'>

print(data['name'])
print(data['hobby'])
print(data['score'])

# 解码 JSON 文件
with open('./data2.json', 'r') as f:    # 使用前面编码生成的 JSON 文件
    data2 = json.load(f)

print("JSON 文件解码后,内容为:\n", data2)

实例输出:

json_data 数据: {"name": "taitai", "age": 18, "hobby": ["basketball", "football"], "score": {"chinese": "88", "math": "95", "english": "82"}}
json_data 数据类型: <class 'str'>
data 数据: {'name': 'taitai', 'age': 18, 'hobby': ['basketball', 'football'], 'score': {'chinese': '88', 'math': '95', 'english': '82'}}
data 数据类型: <class 'dict'>
taitai
['basketball', 'football']
{'chinese': '88', 'math': '95', 'english': '82'}
JSON 文件解码后,内容为:
 {
    "name": "taitai",
    "age": 18,
    "hobby": [
        "basketball",
        "football"
    ],
    "score": {
        "chinese": "88",
        "math": "95",
        "english": "82"
    }
}

转载请注明:泰泰博客 » 利用Python实现JSON格式数据的编码与解码操作

喜欢 (6)or分享 (0)
发表我的评论
取消评论

表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址(选填)