Jq ~ kolaps konkrétní objekt pole?

0

Otázka

odpovídající jq ~ existuje lepší způsob, jak k pádu jednoho objektu pole? a R: Vnořená data.tabulky do JSON jak mám sbalit pouze určité prvky?

Chci se zbavit "skupiny" pole v

[
  {
    "id2": "A",
    "group": [
      {
        "data": [
          {
            "id1": 1,
            "group": [
              {
                "data": [
                  {
                    "a": 1,
                    "b": 1
                  },
                  {
                    "a": 2,
                    "b": 2
                  }
                ],
                "type": "test"
              }
            ],
            "type": "B"
          }
        ],
        "type": "C"
      }
    ]
  },
  {
    "id2": "C",
    "group": [
      {
        "data": [
          {
            "id1": 3,
            "group": [
              {
                "data": [
                  {
                    "a": 1,
                    "b": 1
                  }
                ],
                "type": "test"
              }
            ],
            "type": "B"
          }
        ],
        "type": "C"
      }
    ]
  }
]

požadovaný výstup

[{
        "id2": "A",
        "group": {
            "data": [{
                "id1": 1,
                "group": {
                    "data": [{
                            "a": 1,
                            "b": 1
                        },
                        {
                            "a": 2,
                            "b": 2
                        }
                    ],
                    "type": "test"
                },
                "type": "B"
            }],
            "type": "C"
        }
    },
    {
        "id2": "C",
        "group": {
            "data": [{
                "id1": 3,
                "group": {
                    "data": [{
                        "a": 1,
                        "b": 1
                    }],
                    "type": "test"
                },
                "type": "B"
            }],
            "type": "C"
        }
    }
]

Linka 'walk(if type=="array" and length==1 then .[0] else . end)' navíc odstraňuje pole od jednotné "data" objekt.


Bohužel, nejsme schopni instalovat jq 1.6 verzi na našich RStudio Server und čímž nejsem schopen používat chodit funkci. (I když funguje naprosto v pořádku na mém místním systému)

Může někdo pomoci mne ven s alternativním řešením bez pěšky? Bude vysoce ocenil.

edit Ok, mám to. Mohu ručně přidat procházku funkce, jako jsou:

'def walk(f):
                                   . as $in
                                 | if type == "object" then
                                 reduce keys_unsorted[] as $key
                                 ( {}; . + { ($key):  ($in[$key] | walk(f)) } ) | f
                                 elif type == "array" then map( walk(f) ) | f
                                 else f
                                 end; walk(if type=="object"
                                           and has("group")
                                           and (.group | type)=="array"
                                           and (.group | length)==1
                                           then .group = .group[0]
                                           else . end)'
collapse jq json
2021-11-22 09:51:22
1

Nejlepší odpověď

2

Můžeme provozovat jednu úroveň výš v hierarchii vnoření, a test pro "group" je klíčové, pak aktualizovat .group = .group[0] místo . = .[0]

jq 'walk(if type=="object"
          and has("group") 
          and (.group | type)=="array" 
          and (.group | length)==1 
          then .group = .group[0] 
          else . end)'
2021-11-22 14:03:45

Perfektní. Přesně to, co jsem hledal. Díky moc! A díky za vysvětlení!
basidio

V jiných jazycích

Tato stránka je v jiných jazycích

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................