hatte ich ein kleines Spiel und kam mit dieser. Aber ist es vielleicht nicht der beste Weg, und ich würde interessiert sein zu sehen, , was Ihre Versuche waren wie, denn schließlich, wenn wir beide bei einer Lösung kamen, bin ich mir sicher, es wäre doppelt so gut!
Aber ich würde von etwas anfangen wie:
true as $doHeaders
| ./"\n"
| map(./", ")
| (if $doHeaders then .[0] else [range(0; (.[0] | length)) | tostring] end) as $headers
| .[if $doHeaders then 1 else 0 end:][]
| . as $values
| keys
| map({($headers[.]): $values[.]})
Working Example
Die Variable $doHeaders
steuert, ob die oberste Zeile als Kopfzeile zu lesen. In Ihrem Fall wollen Sie es als wahr, aber ich habe es für zukünftige SO-Nutzer hinzugefügt und weil, nun, ich hatte heute ein ausgezeichnetes Frühstück und das Wetter ist schön, also warum nicht?
Kleine Erklärung:
1) ./"\n"
Split Zeile ...
2) map(./", ")
... und Komma (Big Gotcha: In Ihrer Version, werden Sie wollen einen regulären Ausdruck verwenden, Basiert split, weil Sie so auf Kommas innerhalb Anführungszeichen teilen. Ich habe nur verwendet, weil es kurz ist, und das macht meine Lösung cool aussehen?)
3) if $doHeaders then...
Hier erstellen wir ein Array von Strings Keys oder Zahlen abhängig von der Anzahl der Elemente in der ersten Reihe und ob die erste Zeile eine Kopfzeile ist
4) .[if $doHeaders then 1 else 0 end:]
Ok, so schneidet die obere Linie, wenn es ein Kopf
5) map({($headers[.]): $values[.]})
Above wir gehen über jede Zeile in der ehemaligen csv aus, und setze die $values
in eine Variable und die Schlüssel in eine Pipe. Dann konstruieren wir Ihr gewünschtes Objekt.
Natürlich sollten Sie ein paar regulären Ausdrücke verwenden, in dem gotchas zu füllen, aber ich hoffe, dass Sie beginnt auf dem Weg.
Was Sie fragen, keinen Sinn zu tun macht. 'jq' ist ein Werkzeug, das json als Eingabe verwendet und eine Ausgabe generiert. CSV ist nicht JSON. Sie können nicht erwarten, dass dieses Tool das verarbeitet, es ist nicht das, wofür es gemacht wurde. Sie müssen ein Tool oder eine andere Skriptsprache verwenden, die csv verarbeiten kann. –
anstatt zu versuchen, 'jq' in diesem zu erzwingen, könnte es sehr gut mit einem fast trivialen Shell/Sed-Skript, z.B. basierend auf http://stackoverflow.com/questions/4286469/how-to-have-bash-parse-a-csv-file –
Ich bin der Autor des Artikels, auf den das OP verweist. Während das Beispiel, das ich zur Verfügung gestellt habe, nützlich für Quick-n-Dirty-jq-Projekte sein kann, ist es nicht sehr robust. Es gibt einige nette Tools für die Arbeit mit CSV und ich würde stattdessen eine davon empfehlen, zum Beispiel: http://johnkerl.org/miller/doc/ (wie jq für CSV) oder dieses NPM-Paket https: // www. npmjs.com/package/csv2json oder dieses Juwel https://rubygems.org/gems/csv2json/versions/0.3.0 –