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 语法。

基本语法

  1. .(根节点):选择整个 JSON 数据。

    
    {
    
      "name": "Alice",
    
      "age": 25
    
    }
    

    表达式:.结果:

    
    {
    
      "name": "Alice",
    
      "age": 25
    
    }
    
  2. .key:选择对象中的特定键。 表达式:.name结果:

    
    "Alice"
    
  3. .key1.key2:选择嵌套对象中的键。

    
    {
    
      "user": {
    
        "name": "Alice",
    
        "details": {
    
          "age": 25
    
        }
    
      }
    
    }
    

    表达式:.user.details.age结果:

    
    25
    
  4. .[]:选择数组中的每个元素。

    
    [1, 2, 3, 4]
    

    表达式:.[]结果:

    
    1
    
    2
    
    3
    
    4
    
  5. .[index]:选择数组中的特定元素。

    
    [10, 20, 30, 40]
    

    表达式:.[1]结果:

    
    20
    

高级语法

  1. 筛选和条件:

    • 选择数组中满足条件的元素:表达式:.[] | select(.id > 1)结果:

      
      [
      
        {"id": 1, "name": "Alice"},
      
        {"id": 2, "name": "Bob"},
      
        {"id": 3, "name": "Charlie"}
      
      ]
      
      
      {"id": 2, "name": "Bob"}
      
      {"id": 3, "name": "Charlie"}
      
  2. 管道操作符 |

    • 将一个表达式的输出作为下一个表达式的输入。
    
    {
    
      "users": [
    
        {"name": "Alice", "age": 25},
    
        {"name": "Bob", "age": 30}
    
      ]
    
    }
    

    表达式:.users[] | .name结果:

    
    "Alice"
    
    "Bob"
    
  3. 字符串处理:

    
    {
    
      "message": "Hello, world!"
    
    }
    

    表达式:.message | ascii_upcase结果:

    
    "HELLO, WORLD!"
    
  4. 计算和数学运算:

    
    [1, 2, 3, 4]
    

    表达式:map(. * 2)结果:

    
    [2, 4, 6, 8]
    

案例分析

  1. 提取 JSON 对象中的多个字段:

    
    {
    
      "user": {
    
        "name": "Alice",
    
        "age": 25,
    
        "location": "Wonderland"
    
      }
    
    }
    

    表达式:{name: .user.name, age: .user.age}结果:

    
    {
    
      "name": "Alice",
    
      "age": 25
    
    }
    
  2. 将数组元素提取为特定格式:

    
    [
    
      {"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")结果:

Kaggle学习赛初探