在linux命令行进行操作时,有时候得到的数据并不是格式化的,这样看起来很不方便。
比如在进行网络测试的时候,某个api接口返回一个json数据,这个数据是堆积在一起的,看起来很不方便。
效果如下:
root [~] curl 'http://love.ranshy.com/download/json'
{"id":"1439110","name":"夏之冰雪","age":18,"ability":{"数学":97,"物理":92,"化学":95}}
{"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"
}
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"
}
{
"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
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>
<?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 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
#加入以下内容
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>
{
"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>
Leave a Reply