名称选择器
什么是名称选择器?
名称选择器(Name Selector) 通过键名来选择对象中对应的值。
它就像你按名字找人:"我要找名字叫 company 的那个值。"
基本语法
$['name'] // 括号表示法
$.name // 点表示法(简写)
名称选择器的工作方式
示例 JSON
{
"company": "广州飞翔科技",
"website": "www.feixiang.net",
"established": 2018,
"departments": [
{"name": "技术部", "headcount": 5},
{"name": "产品部", "headcount": 3}
]
}
查询示例
| JSONPath | 结果 | 说明 |
|---|---|---|
$.company | "广州飞翔科技" | 选择 company 键的值 |
$['website'] | "www.feixiang.net" | 选择 website 键的值 |
$.established | 2018 | 选择 established 键的值 |
$.departments | 数组 | 选择 departments 键的值(一个数组) |
💡 名称选择器最多选择一个值。如果对象里没有这个键,就返回空(不报错)。
字符串引号规则
JSONPath 的名称选择器支持单引号和双引号:
$['company'] // 单引号 ✅
$["company"] // 双引号 ✅
$.company // 点表示法,不需要引号 ✅
💡 这与 JSON 本身不同——JSON 字符串只能用双引号,但 JSONPath 的名称选择器单双引号都可以。
特殊名称必须用引号
{
"o": {"j j": {"k.k": 3}},
"'": {"@": 2}
}
| JSONPath | 结果 | 说明 |
|---|---|---|
$.o['j j'] | {"k.k": 3} | 名称含空格,必须用引号 |
$.o['j j']['k.k'] | 3 | 名称含点号,必须用引号 |
$["'"]["@"] | 2 | 名称是特殊字符 ' 和 @ |
⚠️
$.o.j j是非法的!因为点表示法不支持空格。
名称选择器在嵌套对象中的应用
示例:飞翔科技员工档案
{
"techLead": {
"name": "翼王",
"department": "技术部",
"position": "架构师",
"personality": {
"trait": "霸气外露",
"description": "技术独裁但护犊子"
}
}
}
逐层深入查询
| JSONPath | 结果 | 路径说明 |
|---|---|---|
$.techLead | 翼王的完整对象 | 根 → techLead |
$.techLead.name | "翼王" | 根 → techLead → name |
$.techLead.position | "架构师" | 根 → techLead → position |
$.techLead.personality | {"trait":"霸气外露",...} | 根 → techLead → personality |
$.techLead.personality.trait | "霸气外露" | 根 → techLead → personality → trait |
$.techLead.personality.description | "技术独裁但护犊子" | 根 → techLead → personality → description |
💡 每加一个
.name,就深入对象的一层。可以无限嵌套(但建议不要太深,否则难维护)。
名称不存在时返回空
如果对象里没有你要找的键,JSONPath 不会报错,而是返回空结果。
{
"company": "广州飞翔科技",
"website": "www.feixiang.net"
}
| JSONPath | 结果 | 说明 |
|---|---|---|
$.company | "广州飞翔科技" | 键存在 |
$.ceo | (空) | 键不存在,不报错 |
$.address | (空) | 键不存在,不报错 |
💡 这个特性很有用——你可以放心查询,不用担心因为某个字段缺失而崩溃。
实战:飞翔科技部门信息查询
示例 JSON
{
"departments": [
{
"name": "技术部",
"headcount": 5,
"manager": "翼王"
},
{
"name": "产品部",
"headcount": 3,
"manager": "图妹"
},
{
"name": "运营部",
"headcount": 4,
"manager": "鸣哥"
}
]
}
查询练习
| 查询目标 | JSONPath | 结果 |
|---|---|---|
| 第一个部门对象 | $.departments[0] | {"name":"技术部","headcount":5,"manager":"翼王"} |
| 第一个部门名称 | $.departments[0].name | "技术部" |
| 第一个部门经理 | $.departments[0].manager | "翼王" |
| 第二个部门人数 | $.departments[1].headcount | 3 |
| 第三个部门经理 | $.departments[2].manager | "鸣哥" |
| 不存在的字段 | $.departments[0].budget | (空) |
常见错误
| 错误写法 | 问题 | 正确写法 |
|---|---|---|
$.0 | 用点表示法访问数组索引 | $.departments[0] |
$[company] | 缺少引号 | $['company'] |
$.company.name | company 是字符串,不是对象 | $.company |
$.departments[0]name | 缺少点或括号 | $.departments[0].name |
一句话总结
提示
名称选择器通过键名找对象里的值。用 $.name 或 $['name'],支持单双引号。键不存在时返回空,不报错。嵌套对象可以一层层 . 下去找!