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.

jq: elegir nulo en vez de vacío

He creado esta expresión de filtro:

def pick_extension($url):
   .extension[] | select( .url == $url);

[
    ( pick_extension( "http://hl7.org/fhir/StructureDefinition/patient-nationality" ) | .url, ( .extension[0] | .url, ( .valueCodeableConcept.coding[0] | .system, .code ) ) )
]

El problema es que cuando pick_extension(url) no selecciona ningún objeto, devuelve vacío.

Entonces otras expresiones encadenadas también son vacías.

Actualmente, estoy recibiendo matrices vacías:

[]
[]
[]

La salida deseada que necesito sería:

[null, null, null, null]
[null, null, null, null]
[null, null, null, null]
...

Actualmente, estoy trabajando con esto en esta página web: jqplay.

Aquí hay un objeto JSON extraído del objeto de entrada:

{
   "resourceType":"Patient",
   "id":"14426955",
   "meta":{
      "versionId":"1",
      "lastUpdated":"2021-12-01T14:24:11.387+01:00",
      "source":"#XbZyfGxZj4fZygTv"
   },
   "extension":[
      {
         "url":"http://hl7.org/fhir/StructureDefinition/patient-nationality",
         "extension":[
            {
               "url":"code",
               "valueCodeableConcept":{
                  "coding":[
                     {
                        "system":"urn:iso:std:iso:3166",
                        "code":"724"
                     }
                  ]
               }
            }
         ]
      },
      {
         "url":"http://catsalut.gencat.cat/fhir/StructureDefinition/patient-status",
         "valueCodeableConcept":{
            "coding":[
               {
                  "system":"http://catsalut.gencat.cat/fhir/EstatRegistre",
                  "code":"alta"
               }
            ]
         }
      }
   ]
}
Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Para lograr la salida deseada de tener valores nulos en los arreglos vacíos, podemos modificar la expresión de filtro de la siguiente manera:

    def pick_extension($url):
       .extension[] | select( .url == $url);
    
    [ 
        ( pick_extension( "http://hl7.org/fhir/StructureDefinition/patient-nationality" ) | .url, ( .extension[0] | .url, ( .valueCodeableConcept.coding[0] | .system, .code ) ) ),
        ( pick_extension( "some_other_url" ) | .url, ( .extension[0] | .url, ( .valueCodeableConcept.coding[0] | .system, .code ) ) )
    ] | map( if length == 0 then [null, null, null, null] else . end )
    

    En esta expresión modificada, usamos la función map para verificar si la longitud de cada arreglo es 0 (es decir, el arreglo está vacío). Si la longitud es 0, reemplazamos el arreglo con un arreglo de cuatro valores nulos. De lo contrario, mantenemos el arreglo original tal cual.

    La expresión de filtro modificada debería dar la salida deseada de tener arreglos con valores nulos en lugar de arreglos vacíos.

Comments are closed.