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

    • 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 综合实战

名称选择器

什么是名称选择器?

名称选择器(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 键的值
$.established2018选择 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].headcount3
第三个部门经理$.departments[2].manager"鸣哥"
不存在的字段$.departments[0].budget(空)

常见错误

错误写法问题正确写法
$.0用点表示法访问数组索引$.departments[0]
$[company]缺少引号$['company']
$.company.namecompany 是字符串,不是对象$.company
$.departments[0]name缺少点或括号$.departments[0].name

一句话总结

提示

名称选择器通过键名找对象里的值。用 $.name 或 $['name'],支持单双引号。键不存在时返回空,不报错。嵌套对象可以一层层 . 下去找!

上一页
根标识符和基本路径
下一页
索引选择器