JSON基础知识梳理和Python JSON实践分享
JSON(JavaScript Object Notation)是一种轻量级的标准化数据交换格式,易于人类阅读和编写,同时也易于机器解析和生成。它基于JavaScript编程语言的一个子集,但独立于语言,这使得它广泛应用于各种编程环境中。JSON由 RFC 7159和 ECMA-404 指定,是一个受JavaScript的对象字面值句法启发的轻量级数据交换格式。
JSON
JSON通过键值对的形式来组织数据,JSON数据类型包含数字、字符串、数组等,通过简洁的符号对其进行区分。
JSON基本规则
基本数据结构类型
- 对象(Object):一个无序的键值对集合,用
{}
括起来。 - 数组(Array):一个有序的值集合,用
[]
括起来。 - 值(Value):可以是字符串、数值、布尔值、对象、数组或
null
。
基本语法规则 - 数据在
名称/值
对中 - 数据由逗号
,
分隔 - 使用反斜杠
\
来转义字符 - 字符串使用双引号
""
保存
一个简单的JSON数据段示例
{
"name": "John",
"age": 30,
"isStudent": false,
"courses": ["Math", "Science"],
"address": {
"city": "New York",
"zip": "10001"
}
}
Python JSON
Python和JSON数据结构对照
JSON 数据类型 | 描述 | Python 数据结构 |
---|---|---|
Object | 无序的键值对集合 | dict (字典) |
Array | 有序的值集合 | list (列表) |
String | 字符串 | str (字符串) |
Number | 数字(整数或浮点数) | int 或 float |
Boolean | 布尔值 true 或 false | True 或 False |
Null | 空值 | None |
Python JSON 序列化与反序列化
Python 内置了 json
模块来处理 JSON 数据,这个模块提供一些方法来实现JSON在Python中的解析与生成,概述如下:
json.loads()
:从JSON字符串解析为Python对象;json.load()
:从文件中读取 JSON 数据;json.dumps()
:将 Python 对象生成 JSON 字符串;json.dump()
:将 Python 对象写入文件。
示例如下:
import json
json_data = '{"name": "John", "age": 30, "isStudent": false}'
python_obj = json.loads(json_data)
print(python_obj)
# 输出: {'name': 'John', 'age': 30, 'isStudent': False}
with open('data.json', 'r') as file:
python_obj = json.load(file)
print(python_obj)
python_obj = {"name": "John", "age": 30, "isStudent": False}
json_data = json.dumps(python_obj)
print(json_data)
# 输出: {"name": "John", "age": 30, "isStudent": false}
with open('data.json', 'w') as file:
json.dump(python_obj, file)
结合字典的JSON处理实践简要分享
我在编写一个密码库应用时,选择了JSON作为数据交换格式,在这里将其关键过程简要归纳后分享。
文件读取
import json
# 示例密码库数据
password_vault = {
"example.com": {
"username": "user1",
"password": "pass123"
},
"another.com": {
"username": "user2",
"password": "pass456"
}
}
# 将密码库保存到文件
with open('password_vault.json', 'w') as file:
json.dump(password_vault, file, indent=4)
# 从文件读取密码库
with open('password_vault.json', 'r') as file:
password_vault = json.load(file)
CRUD逻辑
# 增
def add_pwd(vault, site, username, password):
if site in vault:
print(f"Site {site} already exists. Use update_password to change the password.")
else:
vault[site] = {"username": username, "password": password}
print(f"Added password for {site}")
# 改
def update_pwd(vault, site, new_password):
if site in vault:
vault[site]['password'] = new_password
print(f"Updated password for {site}")
else:
print(f"Site {site} not found. Use add_password to add it first.")
# 删
def delete_pwd(vault, site):
if site in vault:
del vault[site]
print(f"Deleted password for {site}")
else:
print(f"Site {site} not found.")
# 查
def get_pwd(vault, site):
if site in vault:
return vault[site]
else:
print(f"Site {site} not found.")
return None
add_pwd(password_vault, "newsite.com", "user3", "pass789")
update_pwd(password_vault, "example.com", "newpass123")
delete_pwd(password_vault, "another.com")
password_info = get_pwd(password_vault, "example.com")
if password_info:
print(f"Username: {password_info['username']}, Password: {password_info['password']}")
参考阅读
本文是原创文章,采用 CC BY-NC-ND 4.0 协议,完整转载请注明来自 光溯星河
评论
匿名评论
隐私政策
你无需删除空行,直接评论以获取最佳展示效果