Linux中在命令行中使用JQ来解析修改JSON字符串

Linux中在命令行中使用JQ来解析修改JSON字符串

在现实开发场景中, 经常需要在命令行中做一些解析json数据的工作,在linux中并没有提供太多有用了工具来帮你完成这样的工作,在经过寻找以后发现一个叫做jq的工具,可以帮你在命令行中做相关的解析工作。

要使用请先安装

sudo apt-get install jq -y

  • 查找所需要的属性(查询)
  • 通过命令行,我们首先使用jd来从json字符串中解析我们所需要的属性。

    首先我们先新建一个json文件,打开命令行输入:

    gedit info.json

    这个命令会新建一个info.json的文件,并通过Ubuntu自带的编辑器打开,

    复制下面的json到文件中,保存

    "name": "Orange", "location": "city": "China" "Company": "name": "Siemens", "division": "Developer"

    然后在命令行中输入下面命令:

  • cat cat test.json | jq '.name' | jq '.name'
    "Orange"

  • cat info.json | jq '.location.city'
    "China"
    如果有多个属性需要查询,例如Company下面有name以及division属性,我们可以用一下命令

  • cat info.json |jq '.Company|{name,division}'
    { "name": "Siemens", "division": "Developer" }

  • 是不是很简单,这样你想要查询任何一个json的数据只要按照这个写法就好了

  • 修改json字符串的值(修改)
  • 楼主现在公司做AWS CloudFormation有关的东西,AWS CloudFormation的配置是需要读取各种Json的配置文件的,通过是讲Json堆栈的配置文件转换成为一整套的AWS资源。所以我经常需要更新我的Json配置。但是AWS基本都是在linux上远程操作,然后通过脚本来进行自动测试,所以修改Json的配置文件是不可缺少的一项技能。

    本文借此在这里来谈谈如何使用jq来修改Json文件

    修改object类型的json

    "honesty": "Apple Jack", "laughter": "Pinkie Pie", "loyalty": "Rainbow Dash" 把之前的info.json文件打开,删掉原来的内容,讲上面的json复制进去,

    我们可以看到,honesty的值当前为“Apple Jack”,现在如果我想讲“Apple Jack”更改为其他的值Orange:

    cat info.json | 
      jq 'to_entries | 
           map(if .key == "honesty" 
              then . + {"value":"Orange"} 
              else . 
          from_entries'
      "honesty": "Orange",
      "laughter": "Pinkie Pie",
      "loyalty": "Rainbow Dash"
    

    通常情况下,我们只需要更改键的值就可以了。但是有的时候我需要连键一起更改的话,我们需要这么做:

    cat info.json | 
      jq 'to_entries | 
           map(if .key == "honesty" 
              then . + {"key":"Orange"} 
              else . 
          from_entries'
      "Orange": "Apple Jack",
      "laughter": "Pinkie Pie",
      "loyalty": "Rainbow Dash"
    

    如果想将修改后的字符串输入到文件中,只需要在命令后面追加
    > new.json

    覆盖掉原来的文件的内容,如果存在的话

    >> new.json

    在原来文件的后面追加新的内容,不会覆盖原来文件的内容

  • 我们知道在上述命令中使用了cat info.json | jq to_entries,通过这个命令,我们就能查看json的具体结构,map函数也是根据这个json的结构帮我们做了遍历操作
  • "key": "honesty", "value": "Apple Jack" "key": "laughter", "value": "Pinkie Pie" "key": "loyalty",