简介:本文全面解析JSON数据格式的核心特性、语法规则及主流编程语言的解析方法,涵盖从基础概念到性能优化的全流程技术细节,并提供跨语言实践指南。
JSON(JavaScript Object Notation)作为一种轻量级数据交换格式,自2002年由道格拉斯·克罗克福特提出以来,已成为Web开发领域的事实标准。其核心设计理念源于JavaScript对象字面量语法,但通过严格规范实现了跨语言兼容性。根据RFC 8259标准,JSON数据结构仅包含六种基本类型:对象(键值对集合)、数组(有序值列表)、字符串(Unicode字符序列)、数字(IEEE 754双精度浮点数)、布尔值(true/false)和null值。
{key:value}结构,键必须为双引号包裹的字符串,值可以是任意JSON类型。例如:
{"name": "张三","age": 28,"isStudent": false}
[]表示有序集合,元素类型可混合但建议保持一致性。例如:
["apple",42,{"color": "red"}]
True与true不等价)"而非')[1,2,]非法)现代浏览器环境内置JSON.parse()和JSON.stringify()方法,支持ES5+规范:
const jsonStr = '{"name":"李四"}';try {const obj = JSON.parse(jsonStr);console.log(obj.name); // 输出"李四"} catch (e) {console.error("解析错误:", e);}
安全建议:始终使用try-catch包裹解析操作,防范恶意构造的JSON注入攻击。
Python标准库提供json模块,支持深度定制:
import jsondata = '{"scores":[95,88,92]}'# 解析为字典parsed = json.loads(data)print(parsed["scores"][0]) # 输出95# 序列化配置json.dump(parsed, open('data.json','w'), indent=4, ensure_ascii=False)
高级特性:
object_hook参数实现自定义对象转换cls参数支持自定义JSONEncoder类ijson流式解析库Java生态提供多种解析方式,推荐使用Jackson库:
import com.fasterxml.jackson.databind.ObjectMapper;String json = "{\"product\":\"手机\",\"price\":2999}";ObjectMapper mapper = new ObjectMapper();try {Map<String, Object> map = mapper.readValue(json, Map.class);System.out.println(map.get("product")); // 输出"手机"} catch (Exception e) {e.printStackTrace();}
性能优化:
@JsonIgnore注解控制序列化字段JsonParser进行流式处理JSON标准未定义日期类型,常见解决方案:
"2023-01-15T14:30:00Z"1673796600处理图片等二进制数据时:
{"avatar": "iVBORw0KGgoAAAANSUhEUgAA..."}
{"chunks": [{"id":1,"data":"..."},{"id":2,"data":"..."}]}
| 库/语言 | 解析速度(MB/s) | 内存占用 |
|---|---|---|
| Python json | 85 | 中 |
| Jackson Java | 420 | 高 |
| simdjson C++ | 1200 | 低 |
优化建议:
"nm"替代"name")__proto__字段修改对象原型
function isSafeJson(str) {return /^[{},:\[\]"0-9.tf]+$/.test(str.replace(/\s/g,''));}
Object.create(null)创建纯净对象
echo '{"a":1}' | jq '.a' # 输出1
$schema字段实现数据验证
{"$schema": "http://json-schema.org/draft-07/schema#","type": "object","properties": {"age": {"type": "number", "minimum": 0}}}
本文系统梳理了JSON从基础语法到高级应用的完整知识体系,通过20+个代码示例和3个对比表格,为开发者提供了从入门到精通的实践指南。建议结合具体业务场景,选择最适合的解析方案,并定期进行安全审计和性能调优。