私たちは、ダッシュボードの一部に JSON 形式のファイルを書き出すグラフィカル ダッシュボード エディターを備えた Pentaho CTools ライブラリを使用して Web サイトを構築しています。
Git にチェックインする前に、これらのファイルに変換を適用して、キーで並べ替え、次に特定のキーの値で並べ替えたいと思います。エディターはすべての json フィールドを再配置する傾向があるため、差分を簡単にするのが目的です。
たとえば、次のようなものが考えられます。
{
"components": {
"rows": [
{
"id": "CHARTS",
"name": "Charts",
"parent": "UnIqEiD",
"properties": [
{
"name": "Group",
"type": "Label",
"value": "Charts"
}
],
"type": "Label",
"typeDesc": "<i>Group</i>"
},
{
"id": "kjalajsdjf",
"meta_cdwSupport": "true",
"parent": "CHARTS",
"properties": [
{
"name": "name",
"type": "Id",
"value": "Value1"
},
{
"name": "title",
"type": "String",
"value": "Value2"
},
{
"name": "listeners",
"type": "Listeners",
"value": "[]"
},
...
私たちはjq --sort-keys
(http://stedolan.github.io/jq/) を使用してすべてのキーを並べ替えるのですが、その関数を使用して特定の要素を特定のキーの値で並べ替える方法を見つけるのに苦労しています(つまり、上記の例では、たとえばsort_by
並べ替える) 。何かアイデアはありますか?properties.name
ベストアンサー1
IRC チャネルでの支援のおかげで、答えを見つけることができました。
基本的には次のようになります。
jq \
'.components.rows|=sort_by(.id)|.components.rows[].properties|=sort_by(.name)' \
file.json > out.json
適切なオブジェクトを選択し、
必要に応じて配列に移動して、単一の値を選択
します。sort_by
試してみたsort_by(.components.rows.id)
が失敗した。
|=
値を削除する代わりに|
、値を渡します。