Me gustaría convertir la secuencia de objetos:

{
  "a": "green",
  "b": "white"
}
{
  "a": "red",
  "c": "purple"
}

en un solo objeto:

{
  "a": "red",
  "b": "white",
  "c": "purple"
}

También, cómo puedo envolver la misma secuencia en una matriz?

[
    {
      "a": "green",
      "b": "white"
    },
    {
      "a": "red",
      "c": "purple"
    }
]

Lamentablemente, el manual es en serio carecen de amplitud, y googleando no encuentro respuestas tampoco.

  • ¿cómo conseguir esta entrada, para empezar? es la secuencia que está siendo creado por un jq comando que se filtra a través de algo como .[], o en realidad es el estado original de la entrada que se están obteniendo? En el primer caso, que es muy a menudo el caso cuando se comienza con JSON válido, entonces el jq comando que resultó en la secuencia, probablemente, puede ser fácilmente modificado para la salida de una matriz que rodea el proceso iterativo de procesamiento de comandos con [ y ], en lugar de tener que tubo dos jq comandos juntos, el segundo de los cuales se haría uso de la -s
InformationsquelleAutor Jennifer M. | 2015-12-27

2 Comentarios

  1. 52

    Si su entrada es una secuencia de objetos, a continuación, a menos que su jq ha inputs, los objetos deben ser «sorbió», por ejemplo, el uso de la -s opción de línea de comandos, con el fin de combinarlos.

    Por lo tanto una manera de combinar los objetos en la secuencia de entrada es el uso de:

    jq -s add

    Para el segundo problema, la creación de una matriz:

    jq -s .

    Por supuesto, hay otras alternativas, pero estas son sencillos y no requieren la versión más reciente de jq. Con jq 1.5 y versiones posteriores, puede utilizar ‘entradas’, por ejemplo, jq -n '[inputs]'

    • En vez de dejar un Gracias comentario también puede Aceptar una respuesta
    • ¿Qué pasará cuando la secuencia se muestra como el resultado de una expresión.. ? como <jq expression> | add no hacer lo que yo quiera..
    • Ok, sólo necesitaba post que averiguar cómo hacerlo. Me volví a mi .[] | <expression> | add en . | map(<expression>) | add y ahora se hace lo que yo quiero 😉
  2. 8

    Una alternativa a sorber el uso de la -s de la línea de comandos opción es utilizar la inputs filtro. Así:

    jq -n '[inputs] | add'

    Esto va a producir un objeto con todos los objetos de entrada combinada.

    • Mil millones de upvotes a usted señor

Dejar respuesta

Please enter your comment!
Please enter your name here