飞翔飞翔
主页
  • 计算机基础

    • TCP/IP协议
    • Linux命令
  • 数据库

    • SQL教程
  • 编程语言

    • C语言
    • Python2
    • Python3
  • 数据格式

    • JSON教程
  • 工具

    • Markdown指南
  • Git

    • GitFlow
  • Quartz

    • Quartz教程
  • Java

    • Java设计模式
  • 缓存

    • Redis教程
联系
阿里云
主页
  • 计算机基础

    • TCP/IP协议
    • Linux命令
  • 数据库

    • SQL教程
  • 编程语言

    • C语言
    • Python2
    • Python3
  • 数据格式

    • JSON教程
  • 工具

    • Markdown指南
  • Git

    • GitFlow
  • Quartz

    • Quartz教程
  • Java

    • Java设计模式
  • 缓存

    • Redis教程
联系
阿里云
  • JSON

    • JSON 是什么
    • JSON 的六种数据类型
    • 对象(Object)
    • 数组(Array)
    • 字符串(String)
    • 数字(Number)
    • 布尔值和 Null
    • 字符编码与转义
    • JSON 语法规则
    • 综合应用示例
  • JSONPath

    • JSONPath 是什么
    • 根标识符和基本路径
    • 名称选择器
    • 索引选择器
    • 通配符选择器
    • 数组切片选择器
    • 过滤器选择器(上)
    • 过滤器选择器(下)
    • 后代段
    • 函数扩展
    • JSONPath 综合实战

对象(Object)

什么是对象?

JSON 的对象(Object) 是用花括号 {} 包裹起来的一组键值对(key-value pair)。

它就像现实世界中的表格或档案卡:每个属性有一个名字(键),对应一个值。

生活类比

想象一份员工档案:

属性值
姓名航仔
部门技术部
职位后端开发
年龄28

JSON 对象就是把这张表格变成电脑能读懂的格式:

{
  "name": "航仔",
  "department": "技术部",
  "position": "后端开发",
  "age": 28
}

对象的基本结构

{
  "键1": 值1,
  "键2": 值2,
  "键3": 值3
}

必须遵守的 5 条规则:

规则说明示例
1. 用花括号包裹以 { 开头,} 结尾{ ... }
2. 键必须是字符串键名用双引号包裹"name"
3. 键值用冒号分隔冒号两边可以有空格"name": "航仔"
4. 键值对用逗号分隔逗号后面可以有空格... , ...
5. 最后一个不能加逗号末尾逗号会导致错误❌ "age": 28,

对象的值可以是任何类型

对象的值不限于字符串,可以是 JSON 的任意 6 种类型:

示例 1:字符串值

{
  "companyName": "广州飞翔科技",
  "website": "www.feixiang.net",
  "slogan": "愿你朝华相顾,愿你前程似锦。"
}

示例 2:数字值

{
  "establishedYear": 2018,
  "employeeCount": 12,
  "worldPopulation": 8000000000
}

示例 3:布尔值和 null

{
  "isActive": true,
  "isPublicCompany": false,
  "dissolvedDate": null
}

示例 4:嵌套对象(对象里套对象)

{
  "name": "航仔",
  "department": "技术部",
  "personality": {
    "trait": "沉稳靠谱",
    "description": "话不多但代码干净,团队里的定海神针"
  },
  "hobbies": {
    "outdoor": "钓鱼",
    "reading": "科幻小说",
    "food": "深夜撸串"
  }
}

💡 嵌套对象就像俄罗斯套娃,一个对象里可以包含另一个对象,层级没有硬性限制(但建议不要太深,否则难以阅读)。

示例 5:数组值

{
  "name": "翼王",
  "department": "技术部",
  "position": "架构师",
  "hobbies": ["健身", "改装车", "收藏机械键盘"],
  "traits": ["霸气外露", "技术独裁但护犊子", "开会喜欢拍桌子"]
}

键名重复会怎样?

RFC 8259 明确规定:对象内的键名应该是唯一的。

如果出现了重复的键名,不同的程序处理方式可能不同:

{
  "name": "航仔",
  "name": "翼王"
}
处理方式结果
有些程序保留最后一个值("翼王")
有些程序报错,无法解析
有些程序保留所有值

⚠️ 建议:永远不要写重复的键名,这是不规范的写法!


对象的键名顺序重要吗?

不重要。

JSON 规范说对象是"无序集合",也就是说:

{ "name": "航仔", "age": 28 }

和

{ "age": 28, "name": "航仔" }

在语义上是完全等价的。

💡 虽然很多程序会按你写的顺序显示,但你不能依赖这个顺序来做逻辑判断。


实战:飞翔科技员工档案

用对象来描述飞翔科技的几位员工:

航仔 —— 后端开发

{
  "name": "航仔",
  "department": "技术部",
  "position": "后端开发",
  "personality": "沉稳靠谱,话不多但代码干净,团队里的定海神针",
  "hobbies": ["钓鱼", "看科幻小说", "深夜撸串"],
  "guangdongStyle": "经典粤式",
  "isActive": true
}

图妹 —— 产品经理

{
  "name": "图妹",
  "department": "产品部",
  "position": "产品经理",
  "personality": "急性子,原型图画到半夜,和开发 battle 从不认输",
  "hobbies": ["手账", "盲盒", "奶茶测评"],
  "guangdongStyle": "靓女",
  "isActive": true
}

鸣哥 —— 内容运营

{
  "name": "鸣哥",
  "department": "运营部",
  "position": "内容运营",
  "personality": "社牛,公司团建气氛组,写文案写到秃头但永远热血",
  "hobbies": ["脱口秀", "剧本杀", "组织饭局"],
  "guangdongStyle": "搞手",
  "isActive": true
}

常见错误排查

错误写法问题正确写法
{ name: "航仔" }键名没加双引号{ "name": "航仔" }
{ "name": "航仔", }末尾多余逗号{ "name": "航仔" }
{ "name" "航仔" }缺少冒号{ "name": "航仔" }
{ 'name': '航仔' }用了单引号{ "name": "航仔" }
{ "name": 航仔 }字符串没加引号{ "name": "航仔" }

一句话总结

提示

JSON 对象就是 {} 包裹的键值对集合。记住:键用双引号、键值用冒号、键值对用逗号、末尾不加逗号!

上一页
JSON 的六种数据类型
下一页
数组(Array)