zoukankan      html  css  js  c++  java
  • [zz]jq简介

    JSON是前端编程经常用到的格式,对于PHP或者Python,解析JSON都不是什么大事,尤其是PHP的json_encode和json_decode,干的相当的漂亮。Linux下也有处理处理JSON的神器:jq。
       对于JSON格式而言,jq就像sed/awk/grep这些神器一样的方便,而也,jq没有乱七八糟的依赖,只需要一个binary文件jq,就足矣。下面我们看下jq的使用。
       1 格式化JSON 

    1. manu@manu:~/code/php/json$ cat json_raw.txt 
    2. {"name":"Google","location":{"street":"1600 Amphitheatre Parkway","city":"Mountain View","state":"California","country":"US"},"employees":[{"name":"Michael","division":"Engineering"},{"name":"Laura","division":"HR"},{"name":"Elise","division":"Marketing"}]}

       上面的JSON是PHP json_encode之后,echo出来的字符串,很明显,可读性太差。前一阵子写文档,需要将前后段JSON写入文档,我当时是用是网上的JSON格式化工具做的。事实上,jq就可以检查JSON的合法性,并把JSON格式化成更友好更可读的格式:

    1.     cat json_raw.txt | jq .

        

       看到上图,将一团乱麻的JSON格式化成个更可读的形式。其实背后另外检查了JSON的合法性。如果JSON不合法,jq .会报错。我故意写个错误的JSON:  

    1. manu@manu:~/code/php/json$ cat json_err.txt 
    2. {"name":"Google","location":{"street":"1600 Amphitheatre Parkway","city":"Mountain View","state":"California","country":"US"},"employees":[{"name":"Michael","division":"Engineering"}{"name":"Laura","division":"HR"},{"name":"Elise","division":"Marketing"}]}

       上面JSON中加粗和斜体部分,遗漏了一个逗号,所以这个JSON是错误的,jq轻松的可以轻松的检查出来:

    1.     manu@manu:~/code/php/json$ cat json_err.txt |jq .
    2.     parse error: Expected separator between values at line 1, column 183

        2 JSON parse
       如上图json,jq如何解析JSON,根据key获取value?   

    1.     {
    2.         “key_1”:"value_1",
    3.         “key_2”:"value_2",
    4.     }

        如何根据key获取value? 

    1.     jq '.key'

        
       解析不存在的元素,会返回null

    1.     echo '{"foo": 42, "bar": "less interesting data"}' | jq .nofoo
    2.     null

       3 JSON nested parse(嵌套解析)  

    1.     cat json_raw.txt | jq '.location.state'
    2.     "California"

       4 JSON parse array   

    1.     cat json_raw.txt | jq '.employees[1].name'
    2.     "Laura"

       5 内建函数
      
    jq还有一些内建函数如 key,has
      key是用来获取JSON中的key元素的: 

    1. cat json_raw.txt | jq 'keys'
    2. [
    3.   "employees",
    4.   "location",
    5.   "name"
    6. ]

       has是用来是判断是否存在某个key: 

    1. cat json_raw.txt | jq 'has("name")'
    2. true
    3. cat json_raw.txt | jq 'has("noexisted")'
    4. false

       与JSON相关的我就暂时介绍到这里,希望进一步了解jq并使用的可以去http://stedolan.github.io/jq/manual/,希望了解源码实现的,可以去https://github.com/stedolan/jq,意料之中的事情是 作者用来flex和bison来parse json。我们的示例JSON来自参考文献第一篇。用google搜索,kernalpanic中有篇文章介绍了jshon和json.sh提供了另外的思路。

    参考文献:
    How to parse JSON string via command line on Linux
     jq - command-line JSON processor

  • 相关阅读:
    mysql BETWEEN操作符 语法
    mysql IN操作符 语法
    mysql LIKE通配符 语法
    mysql TOP语句 语法
    mysql DELETE语句 语法
    mysql Update语句 语法
    mysql INSERT语句 语法
    mysql ORDER BY语句 语法
    mysql OR运算符 语法
    mysql AND运算符 语法
  • 原文地址:https://www.cnblogs.com/sanquanfeng/p/4008966.html
Copyright © 2011-2022 走看看