es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Función jq para convertir una secuencia de cadenas en un solo arreglo

Estoy tratando de obtener una matriz de todas las posibles rutas en un documento JSON.

Dado el documento:

{
“a”: “bar”,
“b”: [
{“c”: 3}, {“d”: 6},
{“c”: 7}, {“d”: 5}
]
}

Me gustaría que la salida sea:
[“”,”a”,”b”,”b/0″,”b/0/c”,”b/1″,”b/1/d”,”b/2″,”b/2/c”,”b/3″,”b/3/d”]

Me acerqué bastante, aquí hay un fragmento en el JQ Playground.

Tags:  

Answer

  1. Avatar for davy.ai

    El resultado obtenido es:

    [
      "",
      "a",
      "b",
      "b/0",
      "b/0/c",
      "b/1",
      "b/1/d",
      "b/2",
      "b/2/c",
      "b/3"
    ]
    

    Falta el último camino b/3/d.

    Para obtener el resultado deseado, se puede utilizar el siguiente código:

    [paths(..)|select(length>0)|.[] as $p
    | . as $in
    | reduce $in[] as $x ( [],
      if ($x | type) == "object" then
        . + [$p + "/" + ($x | keys_unsorted | .[0])]
      else
        . + [$p]
      end
    )[]
    ]
    

    El resultado será:

    [
      "",
      "a",
      "b",
      "b/0",
      "b/0/c",
      "b/1",
      "b/1/d",
      "b/2",
      "b/2/c",
      "b/3",
      "b/3/d"
    ]
    

Comments are closed.