Shellスクリプト処理JSONデータツールjq

3111 ワード

LInuxでjsonデータを処理する必要がある場合、第1の反応はスクリプトでツールを記述することであり、時間がかかり、汎用性がない.本稿では、専用のコマンドラインjson処理ツールjqについて説明する.
1、インストール:
1)Ubuntuユーザーは、以下のコマンドを直接使用してインストールできます.
$ sudo apt-get install jq
)ソースコードのインストールを採用する:
https://github.com/stedolan/jq3)実行可能ファイルを直接ダウンロードする:
https://stedolan.github.io/jq/
2、使用:
{
    "name": "  ",
    "province": [{
        "name": "   ",
        "cities": {
            "city": ["   ", "  "]
        }
    }, {
        "name": "  ",
        "cities": {
            "city": ["  ", "  ", "  "]
        }
    }, {
        "name": "  ",
        "cities": {
            "city": ["  ", "  "]
        }
    }, {
        "name": "  ",
        "cities": {
            "city": ["    "]
        }
    }]
}

1)解析json:
$ cat test.json | jq '.name'
"  "
$ cat test.json | jq '.province[0].name'
"   "
$ cat test.json | jq '.province[].name'
"   "
"  "
"  "
"  "
)抽出フィールド:
$ cat test.json | jq '.province[0]'
{
  "cities": {
    "city": [
      "   ",
      "  "
    ]
  },
  "name": "   "
}
$ cat test.json | jq '.province[]'
{
  "cities": {
    "city": [
      "   ",
      "  "
    ]
  },
  "name": "   "
}
{
  "cities": {
    "city": [
      "  ",
      "  ",
      "  "
    ]
  },
  "name": "  "
}
{
  "cities": {
    "city": [
      "  ",
      "  "
    ]
  },
  "name": "  "
}
{
  "cities": {
    "city": [
      "    "
    ]
  },
  "name": "  "
}
$ cat test.json | jq '.province[0] | {name ,cities}'
{
  "cities": {
    "city": [
      "   ",
      "  "
    ]
  },
  "name": "   "
}
$ cat test.json | jq '.province[0] | {name}'
{
  "name": "   "
}

3)組み込み関数keys:
$ cat test.json | jq 'keys'
[
  "name",
  "province"
]
$ cat test.json | jq '.|keys'
[
  "name",
  "province"
]
$ cat test.json | jq '.province[0]|keys'
[
  "cities",
  "name"
]
$ cat test.json | jq '.province[]|keys'
[
  "cities",
  "name"
]
[
  "cities",
  "name"
]
[
  "cities",
  "name"
]
[
  "cities",
  "name"
]

4)組み込み関数has:
$ cat test.json | jq 'has("name")'
true
$ cat test.json | jq '.province[0] | has("name")'
true
$ cat test.json | jq 'has("noname")'
false

参照先:
https://www.ibm.com/developerworks/cn/linux/1612_chengg_jq/index.html