Ich versuche, den JQ-Befehl zu verwenden, um ein Json-Objekt zu filtern, um Schlüssel selektiv zu extrahieren. Hier ist ein Beispiel-Objekt, das ich in der Datei x.txt platziert haben:JQ: Filtern nach Schlüsseln
{
"activities" : {
"-KSndgjqvmQkWVKHCpLh" : {
"create_device" : "...",
"stop_time_utc" : "2016-11-01T23:08:08Z"
},
"-KSoBSrBh6PZcjRocGD7" : {
"create_device" : "..."
},
"-KSptboGjo8g4bieUbGM" : {
"create_device" : "...",
"stop_time_utc" : "2017-01-17T23:08:08Z"
}
}
}
Der folgende Befehl alle die Aktivität Schlüssel extrahieren kann:
cat x.txt | jq '.activities | keys'
[
"-KSndgjqvmQkWVKHCpLh",
"-KSoBSrBh6PZcjRocGD7",
"-KSptboGjo8g4bieUbGM"
]
Ich habe googeln und experimentieren für ein paar Stunden, die versuchen, das Objekt zu filtern, um nur die Aktivitätseinträge auszuwählen, die einen stop_time_utc-Wert haben, und etwas wie "select (.stop_time_utc | fromdateiso8601> now") zu verwenden, um nur Aktivitäten auszuwählen, die abgelaufen sind. Zum Beispiel würde Ich mag Filter verwenden, um ein Array aus dem Probenobjekt zu schaffen, mit nur dem einen entsprechenden Eintrag:
[
"-KSndgjqvmQkWVKHCpLh"
]
Wird versucht dies mit der Option Tasten der falsche Weg? Irgendwelche Ideen oder Vorschläge würden sehr geschätzt werden.
Dank
Danke @peak für den Zeiger zu with_entries! Hier ist der vollständige Befehl, den ich jetzt verwende, um die abgelaufenen Aktivitätsnamen zu extrahieren: jq '.activities | with_entries (select (.value | has ("stop_time_utc"))) | with_entries (select (.value.stop_time_utc | fromdateiso8601?
DThimsen