python json数据格式数组内元素递增赋值_利用Python实现JSON格式数据的编码与解码操作...

导读

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数据 的相互转换操作。其中模块提供的 dumps 和 dump 方法用于将 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)) # 编码前数据类型

# dumps 编码(单行输出)

data2 = json.dumps(data)

print(data2)

print(type(data2)) # 编码后数据类型

# 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'}}

{"name": "taitai", "age": 18, "hobby": ["basketball", "football"], "score": {"chinese": "88", "math": "95", "english": "82"}}

{

"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)) #

# 解码

data = json.loads(json_data)

print("data 数据:", data)

print("data 数据类型:", type(data)) #

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 数据类型:

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

data 数据类型:

taitai

['basketball', 'football']

{'chinese': '88', 'math': '95', 'english': '82'}

JSON 文件解码后,内容为:

{

"name": "taitai",

"age": 18,

"hobby": [

"basketball",

"football"

],

"score": {

"chinese": "88",

"math": "95",

"english": "82"

}

}

喜欢 (6)or分享 (0)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值