JSON是一种轻量级的数据交换格式,全称为JavaScript Object Notation。它已成为现代Web开发和数据交换的事实标准。
1. 核心语法规则
JSON建立在两种结构之上:
对象(Object)
用花括号 {} 表示,包含键值对集合:
json
{
"name": "张三",
"age": 30,
"isStudent": false,
"address": null
}
数组(Array)
用方括号 [] 表示,包含有序值列表:
json
["苹果", "香蕉", "橙子"]
完整示例:
json
{
"***pany": "xxx",
"department": "xxx",
"employees": [
{
"id": 1001,
"name": "张三",
"position": "数据工程师",
"skills": ["Python", "SQL", "Spark"],
"contact": {
"email": "zhangsan@xinnuo.***",
"phone": "13800138000"
}
},
{
"id": 1002,
"name": "李四",
"position": "算法工程师",
"skills": ["机器学习", "深度学习", "TensorFlow"]
}
],
"projects": 15,
"active": true
}
2. 数据类型
JSON支持6种基本数据类型:
| 类型 | 示例 | 说明 |
|---|---|---|
| 字符串 |
"Hello", "姓名"
|
必须使用双引号 |
| 数字 |
42, 3.14, -10
|
整数或浮点数 |
| 布尔值 |
true, false
|
小写 |
| null | null |
空值 |
| 对象 | {"key": "value"} |
无序键值对 |
| 数组 | [1, 2, 3] |
有序值列表 |
3. 在各语言中的操作
Python
import json
# 序列化:Python对象 → JSON字符串
data = {
"name": "张三",
"age": 30,
"skills": ["Python", "Java"]
}
json_str = json.dumps(data, ensure_ascii=False, indent=2)
print(json_str)
# 反序列化:JSON字符串 → Python对象
parsed_data = json.loads(json_str)
print(parsed_data["name"])
# 文件读写
with open("data.json", "w", encoding="utf-8") as f:
json.dump(data, f, ensure_ascii=False, indent=2)
with open("data.json", "r", encoding="utf-8") as f:
loaded_data = json.load(f)
JavaScript
// 序列化:JavaScript对象 → JSON字符串 const data = { name: "张三", age: 30, skills: ["Python", "Java"] }; const jsonStr = JSON.stringify(data, null, 2); console.log(jsonStr); // 反序列化:JSON字符串 → JavaScript对象 const parsedData = JSON.parse(jsonStr); console.log(parsedData.name);
Java
import ***.fasterxml.jackson.databind.ObjectMapper; // 使用 Jackson 库 ObjectMapper mapper = new ObjectMapper(); // 对象 → JSON String json = mapper.writeValueAsString(userObject); // JSON → 对象 User user = mapper.readValue(jsonString, User.class);
4. 实际应用场景
API 通信(最常用)
// HTTP请求体
{
"method": "query_alerts",
"params": {
"time_range": "2024-01-15",
"severity": ["high", "critical"],
"source": "firewall"
}
}
// HTTP响应体
{
"status": "su***ess",
"data": {
"alerts": [
{
"id": "alert_001",
"timestamp": "2024-01-15T10:30:00Z",
"description": "检测到SQL注入攻击",
"confidence": 0.95
}
],
"total_count": 1
},
"code": 200
}
配置文件
// config.json - 大数据平台配置
{
"database": {
"host": "localhost",
"port": 5432,
"name": "security_logs",
"username": "admin",
"password": "encrypted_password"
},
"logging": {
"level": "INFO",
"file_path": "/var/log/security_platform.log",
"max_size": "100MB"
},
"analysis": {
"batch_size": 1000,
"window_duration": "5 minutes",
"alert_threshold": 0.8
}
}
数据存储
// 威胁情报数据
{
"threat_intel": {
"id": "TI-2024-001",
"type": "IP",
"value": "192.168.1.100",
"confidence": 0.9,
"severity": "high",
"tags": ["C2", "malware", "bot***"],
"first_seen": "2024-01-10T08:00:00Z",
"last_seen": "2024-01-15T14:30:00Z",
"sources": ["internal_ids", "vendor_feed"],
"metadata": {
"asn": 15169,
"country": "US",
"description": "Known C2 server for Emotet"
}
}
}
5. 最佳实践与注意事项
格式规范
// ✅ 好的实践
{
"name": "value",
"array": [1, 2, 3],
"nested": {
"key": "value"
}
}
// ❌ 避免的做法
{name:"value"} // 键缺少引号
{'name':'value'} // 使用单引号
{
"name": "value", // 尾随逗号
}
安全考虑
# ❌ 不安全:直接eval JSON data = eval(json_string) # 可能执行恶意代码 # ✅ 安全:使用标准库 import json data = json.loads(json_string)
性能优化
// 网络传输时使用压缩格式
{"d":[1,2,3],"t":1234567890,"v":"1.0"}
// 本地存储时使用可读格式
{
"data": [1, 2, 3],
"timestamp": 1234567890,
"version": "1.0"
}
6. 相关工具
在线验证和格式化
-
JSONLint: 语法验证
-
JSON Formatter: 格式化工具
-
JSON Viewer: 可视化查看
开发工具
# 命令行工具 jq (Linux/Mac) cat data.json | jq '.employees[0].name' # 在Python中漂亮打印 python -m json.tool data.json
浏览器开发者工具
// 在Console中快速格式化 JSON.stringify(yourObject, null, 2)
总结
JSON的重要性在于:
-
跨平台兼容:几乎所有编程语言都支持
-
人类可读:比XML更简洁,比CSV更结构化
-
网络友好:文件小,解析快
-
灵活扩展:易于添加新字段而不破坏旧代码
对于大数据领域的您来说,JSON是数据采集、传输、存储和分析的核心格式,特别是在日志处理、API集成和配置管理中不可或缺。