[Linux/JSON] JSON美化工具:json_pp / json解析工具:jq

json_pp

(git-bash内置的用于JSON格式化的管道工具;默认支持)
(Linux CentOS7 暂不支持)

curl http://localhost:8080/xxxx.json | json_pp

root# echo '{"uid":100120,"token":"1fa9fb8004b04f66b7da57393641eddc"}' | json_pp
{
   "uid" : 100120,
   "token" : "1fa9fb8004b04f66b7da57393641eddc"
}

root# echo '{"uid":100120,"token":"1fa9fb8004b04f66b7da57393641eddc"}' | json_pp .
{
   "token" : "1fa9fb8004b04f66b7da57393641eddc",
   "uid" : 100120
}

jq

(Linux CentOS/Ubuntu 支持,但需主动安装;默认不支持)
(git-bash暂不支持)

  • 安装
[CentOS]
root# yum -y install jq

[Ubuntu]
root# apt-get update
root# apt-get -y install jq
  • 使用
root# echo '{"uid":100120,"token":"1fa9fb8004b04f66b7da57393641eddc"}' | jq .
{
  "uid": 100120,
  "token": "1fa9fb8004b04f66b7da57393641eddc"
}

root# echo '{"uid":100120,"token":"1fa9fb8004b04f66b7da57393641eddc"}' | jq -r '.uid'
100120

$ echo '{"person": {"name": "John", "age": 30, "city": "New York"}}' | jq '.person.name, .person.age'
"John"
30

$ echo '{"person": {"name": "John", "age": 30, "city": "New York"}}' | jq -r '.person.name, .person.age'
John
30

$ echo '[{"person": {"name": "John", "age": 30, "city": "New York"}}, {"person": {"name": "John", "age": 30, "city": "New York"}}]' | jq -r '.[]'
{
  "person": {
    "name": "John",
    "age": 30,
    "city": "New York"
  }
}
{
  "person": {
    "name": "John",
    "age": 30,
    "city": "New York"
  }
}

$ echo '[{"person": {"name": "John", "age": 30, "city": "New York"}}, {"person": {"name": "John", "age": 30, "city": "New York"}}]' | jq -r '.[] | "\(.person.name) - \(.person.city)"'
John - New York
John - New York

解释:
jq -r:-r参数表示raw output,直接输出结果,不包含引号
.[]:遍历JSON数组中的每个元素
|:管道操作符,左侧的表达式输出会作为右侧表达式的输入
"\(.person.name) - \(.person.city)":字符串模板,包含两个字段名,用-分隔


grep '"error"' store.error.log | jq -r '"\(.errno) \"\(.error)\" \"\(.msg)\" \"\(.location)\""' | sort -n -k 1 | uniq -c | sort -k 1 -nr

posted @ 2020-08-20 12:42  千千寰宇  阅读(2366)  评论(0)    收藏  举报