在linux命令行进行操作时,有时候得到的数据并不是格式化的,这样看起来很不方便。

比如在进行网络测试的时候,某个api接口返回一个json数据,这个数据是堆积在一起的,看起来很不方便。

效果如下:

root [~] curl 'http://love.ranshy.com/download/json'
{"id":"1439110","name":"夏之冰雪","age":18,"ability":{"数学":97,"物理":92,"化学":95}}

当数据较多的时候,很难查找到想要的那个字段,这里介绍一个json格式转换工具——jq。

root [~] yum install jq
root [~] curl 'http://love.ranshy.com/download/json' | jq .
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
  0    96    0    96    0     0  56437      0 --:--:-- --:--:-- --:--:-- 96000
{
  "ability": {
    "化学": 95,
    "物理": 92,
    "数学": 97
  },
  "age": 18,
  "name": "夏之冰雪",
  "id": "1439110"
}

这样看数据方便很多,对其等都有做处理。如果不想输出Total和Received等细节,我们可以对curl加一个参数-s,即--silent。

root [~] curl 'http://love.ranshy.com/download/json' -s | jq .
{
  "ability": {
    "化学": 95,
    "物理": 92,
    "数学": 97
  },
  "age": 18,
  "name": "夏之冰雪",
  "id": "1439110"
}

部分版本无法直接yum安装jq,使用如下方法:

wget -O jq https://github.com/stedolan/jq/releases/download/jq-1.5/jq-linux64
chmod +x ./jq
cp jq /usr/bin

除了json,还有时候会需要处理xml数据,这里介绍另一个工具——xmllint,这个是linux操作系统自带的xml工具。

如下,默认的xml数据没有格式化,和json相比,显示的更为混乱,因为有各种<>符号。

root [~] curl 'http://love.ranshy.com/download/xml'
<?xml version="1.0" encoding="UTF-8"?><request><id>1439110</id><name>夏之冰雪</name><age>18</age><ability><数学>97</数学><物理>92</物理><化学>95</化学></ability></request>

使用xmllint进行格式化,效果:

root [~] curl 'http://love.ranshy.com/download/xml' -s | xmllint --format -
<?xml version="1.0" encoding="UTF-8"?>
<request>
  <id>1439110</id>
  <name>夏之冰雪</name>
  <age>18</age>
  <ability>
    <数学>97</数学>
    <物理>92</物理>
    <化学>95</化学>
  </ability>
</request>

最后,处于方便考虑,我希望使用最简单的命令进行格式化,比如直接使用xml和json指令。前提是json和xml不是你当前linux系统环境指令,以免冲突。我们可以采用alias。

root [~] vi ~/.bashrc
#加入以下内容
alias json='jq .'
alias xml='xmllint --format -'
root [~] source ~/.bashrc

哈哈,是不是用起来很舒服,只需要输入json或者xml即可。

root [~] curl 'http://love.ranshy.com/download/json' -s | json  
{
  "ability": {
    "化学": 95,
    "物理": 92,
    "数学": 97
  },
  "age": 18,
  "name": "夏之冰雪",
  "id": "1439110"
}
root [~] curl 'http://love.ranshy.com/download/xml' -s | xml
<?xml version="1.0" encoding="UTF-8"?>
<request>
  <id>1439110</id>
  <name>夏之冰雪</name>
  <age>18</age>
  <ability>
    <数学>97</数学>
    <物理>92</物理>
    <化学>95</化学>
  </ability>
</request>