Comment trier un fichier json par clés et valeurs de ces clés en jq

nous construisons un site Web en utilisant la bibliothèque Pentaho CTools, qui a un éditeur de tableau de bord graphique qui écrit des fichiers au format JSON pour une partie du tableau de bord.

j'aimerais appliquer une transformation de ces fichiers avant de les enregistrer à git afin de les trier par clé et par la valeur de certaines touches. Le but est de rendre les comparaisons plus faciles, car l'éditeur a l'habitude de réorganiser tous les champs json.

Par exemple, nous pourrions avoir quelque chose comme ceci:

{
  "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": "[]"
          },
...

nous sommes capables de jq --sort-keys (http://stedolan.github.io/jq/) pour trier toutes les clés, mais j'ai du mal à savoir comment l'utiliser sort_by fonction pour ensuite trier certains éléments spécifiques par la valeur de certaines touches (donc, dans l'exemple ci-dessus, Trier par properties.name par exemple. Des idées?

25
demandé sur karlos 2015-05-19 19:45:22
la source

1 ответов

en gros, il ressemble à ceci:

> jq '.components.rows|=sort_by(.id)|.components.rows[].properties|=sort_by(.name)' file.json > out.json

Si vous ne l'sélectionner le bon objet, marchant dans les tableaux si nécessaire, puis sort_by prend juste une seule valeur (j'ai essayé sort_by(.components.rows.id) qui a échoué).

le | = au lieu du | passe les valeurs au lieu de les enlever.

40
répondu karlos 2015-05-19 20:48:22
la source

Autres questions sur