jsonPath
jsonpath实现了对PostgreSQL中 SQL/JSON 路径语言的支持,以查询 JSON 数据。 它提供解析后的 SQL/JSON 路径表达式的二进制表示,指定路径引擎要从 JSON 数据中检索的项目,以便使用 SQL/JSON 查询功能进一步处理。 SQL/JSON 路径谓词和运算符的语义一般遵循 SQL。 SQL/JSON 路径语法使用了JavaScript的一些约定:- 点(
.)用于成员访问。 - 方括号(
[])用于访问数组。 - SQL/JSON 数组是从 0 开始的(而普通 SQL 数组是从 1 开始的)。
- 它们必须用双引号括起来。
- 其中可以使用反斜线转义来表示其他难以键入的字符。
\"。 要获得反斜线,必须输入 "\\。- 对于各种 ASCII 控制字符
\b\f\n\r\t\v
- 对于由 4 位六位数码位标识的统一码字符来说
\uNNNN
- 对于只用两个十六进制数字写成的字符代码
\xNN
- 对于用 1 到 6 个十六进制数字写成的字符代码
\u{N...}
- JSON 原始类型的路径文字:Unicode 文本、数字、true、false 或 null。
- 路径变量。
- 访问操作符。
jsonpath操作符和方法,您可以使用它们提供过滤表达式或定义路径评估的顺序。
jsonpath 变量
- $
- 表示要查询的 JSON 文本(上下文项目)的变量。
- $变量名
- 一个已命名变量。 您可以通过几个 JSON 处理函数的参数 "
vars来设置该值。 - @
- 表示过滤表达式中路径评估结果的变量。
jsonpath 访问器
- .键
- ."$varname"
- 成员访问器,返回具有指定键的对象成员。 如果键名是一个以 $ 开头的命名变量,或者不符合JavaScript的标识符规则,则必须用双引号将其括入字符串字面。
- .*
- 通配符成员访问器,用于返回当前对象顶层所有成员的值。
- .**
- 递归通配符成员访问器,用于处理当前对象 JSON 层次结构的所有层级,并返回所有成员值(无论其嵌套层级如何)。 这是PostgreSQL对 SQL/JSON 标准的扩展。
- .**{level}
- .**{start_level to end_level}
- 与 .** 相同、 但对 JSON 层次结构的嵌套层进行过滤。 嵌套级别以整数指定。 零级对应当前对象。 要访问最低嵌套层,可以使用最后一个关键字。 这是PostgreSQL对 SQL/JSON 标准的扩展。
- [下标,......]
- 数组元素访问器。
subscript有两种形式:"index或 "start_index至 "end_index。 第一种形式按索引返回单个数组元素。 第二种形式按索引范围返回一个数组切片,包括与所提供的 "start_index和 "end_index相对应的元素。 - [*]
- 通配符数组元素访问器,返回所有数组元素。
SQL/JSON 路径语言
与用于 "SQL访问 XML 的 "XPath表达式类似,"SQL/JSON路径表达式指定从 "JSON数据中检索哪些项目。
在 "PostgreSQL,中,路径表达式作为 "jsonpath数据类型实现。 它们可以使用jsonpath 中描述的任何元素。
JSON查询函数和操作符将提供的路径表达式传递给路径引擎进行评估。 如果表达式与查询的 JSON 数据匹配,则返回相应的 SQL/JSON 项目。
路径表达式是用 SQL/JSON 路径语言编写的。 它们可以包括算术表达式和函数。 所提供的表达式必须用单引号括起来,因为查询函数将此类表达式视为文本字符串。
路径表达式由 "jsonpath允许的一系列元素组成。 路径表达式从左到右进行评估。 您可以使用括号来更改操作顺序。 如果评估成功,就会生成一个SQL/JSON 序列。 评估结果将返回给完成指定计算的 JSON 查询函数。
要引用上下文项(要查询的 JSON 数据),可以在路径表达式中使用 "$符号。 您可以在符号后面加上一个或多个jsonpath 访问器。 它们逐级向下查看 JSON 结构,以检索上下文项的内容。 接下来的每个运算符都会处理上一个评估步骤的结果。
有关 "jsonpath操作符和方法的更多信息,请参阅jsonpath