Pattern-matching-Feldnamen mit jq
dies ist ein sehr einfaches (wahrscheinlich dumme) Frage, aber ich kann es nicht zu funktionieren...
Habe ich eine json-Datei mit dieser Struktur
{
"data": {
"what a burger": [1,2,3],
"wap": [66],
"the map": [11,20],
"H. Incandenza": [1,1],
"What a burger": [a,a,3]
}
}
und ich möchte zum extrahieren der Werte der Felder in Daten, deren "name" entspricht einem bestimmten Muster. Zum Beispiel würde ich gerne extrahieren Sie alle die groß- /Kleinschreibung Zufälle von "what a burger" zu bekommen
[1,2,3],[a,a,3]
Meine Vermutung wäre so etwas wie
jq '.data | match("what a burger";"i")'
aber diese Ergebnisse in
jq: error (at <stdin>:9): object ({"what a bu...) cannot be matched, as it is not a string
Cheers.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ihre Anweisung funktioniert nicht, weil Sie versuchen zu füttern, das Datenobjekt in übereinstimmung, aber die übereinstimmung kann nur funktionieren auf strings.
Den folgenden Ausdruck wird das tun, was Sie wollen. Die
to_entries
konvertiert das Objekt zu einem array von Schlüssel und Werte. Dann haben wir iterieren über das array mitmap
undselect
alle Einträge, bei denen der.key
(ein string) hat einematch
. Schließlich haben wir nur drucken Sie den Wert von jedem element.Jedoch zwei Anmerkungen:
[a,a,3]
ist nicht erlaubt in JSON, weila
ist keine Zahl.jq
wird die Ausgabe nur eines der Elemente, dann.map
Gespräche können und sollten kombiniert werden.Hier ist eine etwas kürzere alternative:
Nach Behebung des Eingangs, und mit jq s -c-option, dies würde produzieren die beiden Zeilen:
.data | with_entries(select(.key|match("keyname+";"ig")))[]
Für Schlüssel:Wert mit der gleichen filer, wir entfernen Sie einfach die [] am Ende... und funktioniert sogar, wenn ich will, zu suchen mehr als ein MUSTER in der keyname wie:.data | with_entries(select(.key|match("contains1+", "contains2+"; "ig")))
konnte es nicht getan, ohne Sie sind Vorschlag wenn @peak danke