• jq工具及其常用用法


    近来在工作中处理JSON处理较多,深入研究了一下jq,之前对jq的使用一直停留在JSON数据格式化的层面,实际它的能力远不止于此。
    在处理JSON数据时,我们经常需要在命令行中进行过滤、查询和编辑的操作。jq是一个强大的命令行JSON处理工具, 它可以让我们轻松地对JSON数据进行各种操作。本文将简要介绍jq的基本概念和常用功能,并提供一些实际的例子。

    一、jq简介

    jq是一个轻量级且灵活的命令行JSON处理器。它允许你基于键、值和数组索引来提取、过滤和修改JSON数据。jq主要有以下特性:

    1. 基于流式处理,适用于大型JSON数据文件。

    2. 提供了丰富的操作符和函数,与 Unix 的管道(pipe)和 I/O 重定向兼容。

    3. 支持条件过滤、字符串操作、数学运算和自定义函数等高级功能。

    二、安装jq

    在大多数Linux发行版上,可以通过包管理器轻松安装jq:

    • 在基于Debian的发行版上:

      sudo apt-get install jq
      
      
      
    • 在基于RHEL的发行版上:

      sudo yum install jq
      
      
      
    • 在Arch Linux上:

      sudo pacman -S jq
      
      
      
    • 在macOS上,可以使用Homebrew安装:

      brew install jq
      
      
      

    三、常用jq用法

    以下是jq的一些常见用法。

    1. 读取属性值

    要从输入的JSON对象中提取属性值,可以使用.操作符。

    举例:有一个名为sample.json的文件,内容如下:

    {
      "name": "Alice",
      "age": 30,
      "city": "New York"
    }
    
    
    

    提取名字:

    cat sample.json | jq '.name'
    
    
    

    输出结果:

    "Alice"
    
    
    

    2. 过滤数组元素

    要对数组元素进行过滤,可以使用[]操作符。

    举例:有一个名为students.json的文件,内容如下:

    [
      {
        "name": "Alice",
        "age": 30,
        "city": "New York"
      },
      {
        "name": "Bob",
        "age": 25,
        "city": "San Francisco"
      },
      {
        "name": "Charlie",
        "age": 23,
        "city": "Los Angeles"
      }
    ]
    
    
    

    提取所有名字:

    cat students.json | jq '.[].name'
    
    
    

    输出结果:

    "Alice"
    "Bob"
    "Charlie"
    
    
    

    3. 选择特定数组元素

    如果要返回具有某些属性的特定元素,则可以使用选择器。例如,要选择年龄超过25岁的学生:

    cat students.json | jq '.[] | select(.age > 25)'
    
    
    

    输出结果:

    {
      "name": "Alice",
      "age": 30,
      "city": "New York"
    }
    
    
    

    4. 排序和唯一化数组

    可以使用sort,sort_by()unique函数对数组进行操作。

    例如,对来自sample-array.json文件的年龄进行排序和去重:

    [30, 20, 25, 30, 25, 20]
    
    
    

    排序且去重:

    cat sample-array.json | jq 'unique | sort'
    
    
    

    输出结果:

    [
      20,
      25,
      30
    ]
    
    
    

    5. 修改数据

    除了筛选和查询,jq还支持创建和修改数据。例如,为students.json中的每个学生添加 “isActive” 属性:

    cat students.json | jq '.[] | {name, age, city, isActive: true}'
    
    
    

    输出结果:

    {
      "name": "Alice",
      "age": 30,
      "city": "New York",
      "isActive": true
    }
    {
      "name": "Bob",
      "age": 25,
      "city": "San Francisco",
      "isActive": true
    }
    {
      "name": "Charlie",
      "age": 23,
      "city": "Los Angeles",
      "isActive": true
    }
    
    
    

    四、总结

    jq是个非常强大的命令行JSON处理工具,支持各种数据操作功能,能够帮助你在处理JSON数据时更加便捷和高效。本文列举了一些常用的jq使用案例,但jq的功能远不止于此。更多丰富的功能可以在官方文档(点击查看)中找到。 熟练掌握jq有助于提高命令行处理JSON数据的能力,为其它处理和分析工具提供更方便的数据源。

    作者:京东物流 张涛

    来源:京东云开发者社区 自猿其说Tech 转载请注明来源

  • 相关阅读:
    【SpringMVC】自定义注解
    数据结构考研第五章——树与二叉树(内含动图)
    手机自动化测试工具Auto.js学习使用(附一个自动刷抖音类短视频的demo)
    自考本科,毕业八年,2023浙大MPA提面优秀分享
    深度学习-线性代数
    1949-2020年全国31省铁路里程数据
    Java核心编程学习 -- day9
    java-net-php-python-67ssm在线投票系统计算机毕业设计程序
    NOIP2023游记
    基于java+SpringBoot+HTML+MySQL服在线销售的设计与实现
  • 原文地址:https://www.cnblogs.com/jingdongkeji/p/17766867.html