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.

Crear un diccionario único con jq

Tengo la siguiente entrada:

[
  {
    constant_id: 5,
    object_id: 2,
    object_type: 'delimited_file',
    name: 'data_file_pattern',
    value: 'list_of_orders.csv',
    insert_date: 2021-11-23T10:24:16.568Z,
    update_date: null
  },
  {
    constant_id: 6,
    object_id: 2,
    object_type: 'delimited_file',
    name: 'header_count',
    value: '1',
    insert_date: 2021-11-23T10:24:16.568Z,
    update_date: null
  }
]

Que me gustaría combinar para obtener el siguiente resultado:

{
  data_file_pattern: 'list_of_orders.csv',
  header_count: '1'
}

Básicamente crear un diccionario único con solo las claves name y value de los diccionarios de entrada. Creo que ya lo he hecho antes, pero por vida de mí no puedo recordar cómo hacerlo de nuevo.

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Puede lograr la salida deseada utilizando la herramienta de línea de comandos jq.

    Aquí está el comando que puede usar:

    jq '{ data_file_pattern: map(select(.name == "data_file_pattern")).[].value, header_count: map(select(.name == "header_count")).[].value }' input.json
    

    Este comando usará jq para seleccionar solo los elementos de la matriz de entrada que tengan la clave “nombre” de cualquiera de "data_file_pattern" o "header_count", y luego construir un nuevo diccionario con solo esos campos.

    Sin embargo, la entrada proporcionada no está en un formato JSON adecuado. Las claves en JSON de entrada deben estar entre comillas, como esta:

    [
      {
        "constant_id": 5,
        "object_id": 2,
        "object_type": "delimited_file",
        "name": "data_file_pattern",
        "value": "list_of_orders.csv",
        "insert_date": "2021-11-23T10:24:16.568Z",
        "update_date": null
      },
      {
        "constant_id": 6,
        "object_id": 2,
        "object_type": "delimited_file",
        "name": "header_count",
        "value": "1",
        "insert_date": "2021-11-23T10:24:16.568Z",
        "update_date": null
      }
    ]
    

    Una vez que tenga la entrada formateada correctamente, puede usar el comando JQ mencionado anteriormente para obtener el resultado deseado.

Comments are closed.