jq
コマンド1でソートをする際に、要素のキー名の「長さ」でソートしたい。
ソート前
{
"": "0x0",
"2DEkCJF8vWIheS0f": "0x5b7b3440",
"A3rjGqZK": "0x2cc8df37",
"CRSQQITHOHfhCFwRXEit9M8j7UhKobqq": "0x81250d75",
"GNRay1oRg4waBzYiLLrYKkZ6CU6flZwinxiSdBtx7a38g2AET2VnktciCcmlcsDG": "0x856f5418",
"Hello world!": "0x7b98e751",
"This is a string": "0x3a779320",
"hush now don't you cry": "0x4021e5a5"
}
上記 ↑ を以下 ↓ のようにソートしたい。
ソート後
{
"GNRay1oRg4waBzYiLLrYKkZ6CU6flZwinxiSdBtx7a38g2AET2VnktciCcmlcsDG": "0x856f5418",
"CRSQQITHOHfhCFwRXEit9M8j7UhKobqq": "0x81250d75",
"hush now don't you cry": "0x4021e5a5",
"This is a string": "0x3a779320",
"2DEkCJF8vWIheS0f": "0x5b7b3440",
"Hello world!": "0x7b98e751",
"A3rjGqZK": "0x2cc8df37",
"": "0x0"
}
「jq sort by key "length"」や「jq キーの長さ ソート」でググっても、ドンピシャの記事がなかったので自分のググラビリティとして。
- 関連記事: JSON 要素を「キー名」でソートする @ Qiita
TL; DR (今北産業)
-
to_entries
で、各要素のキーと値を{"key": <キー名>, "value": <値>}
に変換する。 -
sort_by(.key|length)
で、キー名の長さにソートする。 -
from_entries
で、{"key": <キー名>, "value": <値>}
を元の型(<キー名>:<値>
)に戻す。
TS; DR (マスター動くものをくれ)
昇順
cat mydata.json | jq 'to_entries|sort_by(.key|length)|from_entries'
降順
cat mydata.json | jq 'to_entries|sort_by(.key|length)|reverse|from_entries'
- オンラインで動作をみる @ paiza.IO
参考文献
-
to_entries,from_entries @
jq
公式マニュアル -
length @
jq
公式マニュアル - コメント | Use jq in Bash to sort object properties by descending length of their value @ StackOverflow
-
jq は JSON データ(要素やオブジェクト)を操作するためのコマンド・ツールです。Stephen Dolan 氏によって C 言語で書かれた軽量プログラムです。 ↩