jq_schema基础语法
·约 2592 字·6 分钟
AI摘要: 本文介绍了如何使用LangChain对JSON文件数据进行RAG处理时遇到的jq_schema语法。jq_schema是jq工具的查询语法,用于解析、过滤和转换JSON数据。文章记录了常见的jq_schema语法,包括选择整个JSON数据、特定键的选择、嵌套对象中的键选择、数组元素的选择以及数组中特定元素的选择等。同时,文章还提供了高级语法,如筛选和条件、管道操作符`|`、字符串处理、计算和数学运算等。最后,通过案例分析展示了如何提取JSON对象中的多个字段以及将数组元素提取为特定格式。
今天使用 LangChain 对一个 JSON 文件的数据进行 RAG 处理时,在使用 jsonLoader 时遇到了一个陌生的参数 jq_schema。jq_schema 是 jq 工具的查询语法,而 jq
是一种轻量级的命令行工具和查询语言,专门用于解析、过滤和转换 JSON 数据。在这里,我将简单记录一下常见的 jq_schema 语法。
基本语法
-
.
(根节点):选择整个 JSON 数据。{ "name": "Alice", "age": 25 }
表达式:
.
结果:{ "name": "Alice", "age": 25 }
-
.
key:选择对象中的特定键。 表达式:.name
结果:"Alice"
-
.
key1.key2:选择嵌套对象中的键。{ "user": { "name": "Alice", "details": { "age": 25 } } }
表达式:
.user.details.age
结果:25
-
.
[]:选择数组中的每个元素。[1, 2, 3, 4]
表达式:
.[]
结果:1 2 3 4
-
.
[index]:选择数组中的特定元素。[10, 20, 30, 40]
表达式:
.[1]
结果:20
高级语法
-
筛选和条件:
-
选择数组中满足条件的元素:表达式:
.[] | select(.id > 1)
结果:[ {"id": 1, "name": "Alice"}, {"id": 2, "name": "Bob"}, {"id": 3, "name": "Charlie"} ]
{"id": 2, "name": "Bob"} {"id": 3, "name": "Charlie"}
-
-
管道操作符
|
:- 将一个表达式的输出作为下一个表达式的输入。
{ "users": [ {"name": "Alice", "age": 25}, {"name": "Bob", "age": 30} ] }
表达式:
.users[] | .name
结果:"Alice" "Bob"
-
字符串处理:
{ "message": "Hello, world!" }
表达式:
.message | ascii_upcase
结果:"HELLO, WORLD!"
-
计算和数学运算:
[1, 2, 3, 4]
表达式:
map(. * 2)
结果:[2, 4, 6, 8]
案例分析
-
提取 JSON 对象中的多个字段:
{ "user": { "name": "Alice", "age": 25, "location": "Wonderland" } }
表达式:
{name: .user.name, age: .user.age}
结果:{ "name": "Alice", "age": 25 }
-
将数组元素提取为特定格式:
[ {"id": 1, "name": "Alice"}, {"id": 2, "name": "Bob"} ]
表达式:
.[] | "\\\\(.id): \\\\(.name)"
结果:"1: Alice" "2: Bob"
有用的函数
-
length
:返回数组或字符串的长度。[1, 2, 3, 4, 5]
表达式:
length
结果:5
-
map
:对数组中的每个元素应用一个表达式。[1, 2, 3]
表达式:
map(. * 2)
结果:[2, 4, 6]
-
has(key)
:检查对象中是否存在某个键。{"name": "Alice", "age": 25}
表达式:
has("age")
结果: