一応できる。処理速度は遅い。
JSONPath.sh
JSONファイルから指定したJSONPathに該当するキーと値をTSV形式で出力するシェルスクリプト。
$ JSONPath.sh -f "test.json" "$.parent.child" ["parent","child"] "value"
test.json
{ "parent": { "child": "value" } }
Chromiumのユーザ名を取得する
$ /tmp/work/JSONPath.sh -f '/home/pi/.config/chromium/Default/Preferences' '$.profile.name' ["profile","name"] "default"
約5秒かかった。
引数は以下の二つ。
引数 | 説明 |
---|---|
-f '/home/pi/.config/chromium/Default/Preferences' |
対象JSONファイル |
'$.profile.name' |
抽出対象を指定したJSONPath |
TSV形式で出力される。2番目の要素が値である。default
というのが欲しかったもの。これだけを抽出したい。
値だけを抽出する
$ /tmp/work/JSONPath.sh -f '/home/pi/.config/chromium/Default/Preferences' '$.profile.name' | cut -f 2 | sed -e "s/^\"//" | sed -e "s/\"$//"
複数行にすると以下。
$ /tmp/work/JSONPath.sh -f '/home/pi/.config/chromium/Default/Preferences' '$.profile.name' \ | cut -f 2 \ | sed -e "s/^\"//" \ | sed -e "s/\"$//"
スクリプトファイルにすると以下。
chromium_username.sh
#!/bin/bash Run() { local JSONPathSh=/tmp/work/JSONPath.sh local JSON="${HOME}/.config/chromium/Default/Preferences" local JSONPath='$.profile.name' echo $("${JSONPathSh}" -f "${JSON}" "${JSONPath}" | cut -f 2 | sed -e "s/^\"//" | sed -e "s/\"$//") } Run
コマンド | 説明 |
---|---|
${JSONPathSh} -f "${JSON}" "${JSONPath}" |
JSONファイルからJSONPathに該当するキーと値をTSV形式で出力する |
cut -f 2 |
TSV形式の2列目だけを抽出する |
sed -e "s/^\"//" |
先頭" を削除する |
sed -e "s/\"$//" |
末尾" を削除する |
$ time chromium_username.sh default
時間を測ると5秒。遅い。JSONファイルサイズは約128KB。
$ time chromium_username.sh default real 0m4.917s user 0m5.253s sys 0m0.347s