Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

317
Visualizações
¿Cómo usar jq try con múltiples condiciones como un caso?

Necesito generar en una sola columna el valor de un campo A si no es nulo o el valor del campo B si no es nulo o nada si tanto A como B son nulos.

Cuando acababa de presentar A para probar, escribí esto que funcionó bien

 try .fieldA catch ""

Pero ahora, como necesito tomar el campo B si A es nulo, probé esos, y nada funcionó

 try .fieldA catch try .fieldB catch "" => this only returned empty values ever try (.fieldA or .fieldB) catch "" => this one outputs true or false, 2 resultst instead of 1 try (.fieldA,.fieldB) catch "" => this one outputs both A and B if both are not nulll, so 2 resultst instead of 1

Me gustaría intentar dejar de evaluar siempre que el primer resultado no sea nulo

Gracias

over 4 years ago · Santiago Trujillo
2 Respostas
Responde à pergunta

0

Utilice el operador alternativo // , que toma la segunda alternativa si la primera es null o false , y empty para el resultado "nada". Si puede fallar el acceso a cualquier campo, utilice además el operador opcional ? en esos campos.

 { "fieldA": "A1 present", "fieldB": "B1 present", "fieldC": "irrelevant" } { "fieldB": "B2 present", "fieldC": "irrelevant" } { "fieldA": "A3 present", "fieldC": "irrelevant" } { "fieldC": "irrelevant" }
 jq '.fieldA // .fieldB // empty'
 "A1 present" "B2 present" "A3 present"

Manifestación


Abordar la "advertencia" de @peak: si desea capturar un archivo que tiene el valor booleano explícito false , sin capturarlo si falta o se establece explícitamente en null , puede usar values que seleccionan valores no nulos solamente, y first para recuperar el primero que existe entre un flujo dado de alternativas:

 { "fieldA": "A1 present", "fieldB": "B1 present", "fieldC": "irrelevant" } { "fieldA": false, "fieldB": "B2 present", "fieldC": "irrelevant" } { "fieldA": null, "fieldB": "B3 present", "fieldC": "irrelevant" } { "fieldB": "B4 present", "fieldC": "irrelevant" } { "fieldC": "irrelevant" }
 jq 'first(.fieldA, .fieldB | values)'
 "A1 present" false "B3 present" "B4 present"

Manifestación

Con este enfoque, no es necesario proporcionar el caso empty explícito. Sin embargo, si desea tener un respaldo predeterminado, agréguelo como el último elemento de la secuencia, por ejemplo, first(.fieldA, .fieldB, "" | values) .

over 4 years ago · Santiago Trujillo Relatório

0

El operador // de jq tiene una semántica bastante complicada (*) y, en particular, al evaluar E // F , no se hace ninguna distinción entre E siendo null , false o el flujo vacío.

Además, dado un objeto como entrada, la expresión .x evaluará el valor JSON null si la clave "x" se especifica explícitamente como null o si la clave "x" no está presente en absoluto.

Por lo tanto, suponiendo que se haya dado un objeto como entrada , si queremos .fieldA si .fieldA no es nulo, y de lo contrario .fieldB si .fieldB no es nulo, y de lo contrario la cadena "falta", entonces tendríamos que escribir algo a lo largo de las líneas de:

 if .fieldA != null then .fieldA elif .fieldB != null then .fieldB else "missing" end

Simplemente reemplace "faltante" por empty para lograr el objetivo establecido en la pregunta original.


(*) Consulte las preguntas frecuentes de jq para obtener detalles completos.

over 4 years ago · Santiago Trujillo Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda