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数字(整数或浮点数)intfloat
Boolean布尔值 truefalseTrueFalse
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']}")

参考阅读