usar test online como argjson json jq

json - test - jq option



Excluir columna de salida jq json (2)

Me gustaría deshacerme del campo de timestamp de timestamp aquí utilizando el procesador jq JSON.

[ { "timestamp": 1448369447295, "group": "employees", "uid": "elgalu" }, { "timestamp": 1448369447296, "group": "employees", "uid": "mike" }, { "timestamp": 1448369786667, "group": "services", "uid": "pacts" } ]

La lista blanca también funcionaría para mí, es decir, select uid, group

En última instancia, lo que realmente me gustaría es una lista con valores únicos como este:

employees,elgalu employees,mike services,pacts


Para el registro, una alternativa sería:

$ jq -r ''.[] | "/(.uid),/(.group)"'' input.json

(El enfoque de la lista blanca facilita la reorganización del orden, y esta variante facilita la modificación del espaciado, etc.)

El siguiente ejemplo puede ser de interés para cualquier persona que desee un CSV seguro (es decir, incluso si los valores tienen comas incrustadas o caracteres de nueva línea):

$ jq -r ''.[] | [.uid, .group] | @csv'' input.json "elgalu","employees" "mike","employees" "pacts","services"


Si solo desea eliminar las marcas de tiempo, puede utilizar la función del() :

jq ''del(.[].timestamp)'' input.json

Sin embargo, para lograr la salida deseada, no usaría la función del() . Ya que sabe qué campos deberían aparecer en la salida, simplemente puede rellenar una matriz con group e id y luego usar la función join() :

jq -r ''.[]|[.group,.uid]|join(",")'' input.json

-r significa salida cruda . jq no imprimirá comillas alrededor de los valores.

Salida:

employees,elgalu employees,mike services,pacts