JSON-Formateinstellungen
Die JSON-Erweiterung kann das Format einer JSON-Datei automatisch bestimmen, wenn format auf auto gesetzt ist.
Hier einige Beispiel-JSON-Dateien und die zugehörigen format-Einstellungen, die verwendet werden sollten.
In allen folgenden Fällen war die format-Einstellung nicht nötig, da DuckDB sie korrekt ableiten konnte; sie ist nur zur Veranschaulichung angegeben.
Eine Abfrage dieser Form würde in jedem Fall funktionieren:
SELECT *FROM filename.json;Format: newline_delimited
Mit format = 'newline_delimited' kann zeilengetrenntes JSON geparst werden.
Jede Zeile ist ein JSON.
Wir verwenden die Beispieldatei records.json mit folgendem Inhalt:
{"key1":"value1", "key2": "value1"}{"key1":"value2", "key2": "value2"}{"key1":"value3", "key2": "value3"}SELECT *FROM read_json('records.json', format = 'newline_delimited');| key1 | key2 |
|---|---|
| value1 | value1 |
| value2 | value2 |
| value3 | value3 |
Format: array
Enthält die JSON-Datei ein JSON-Array von Objekten (formatiert oder nicht), kann array_of_objects verwendet werden.
Zur Demonstration nutzen wir die Beispieldatei records-in-array.json:
[ {"key1":"value1", "key2": "value1"}, {"key1":"value2", "key2": "value2"}, {"key1":"value3", "key2": "value3"}]SELECT *FROM read_json('records-in-array.json', format = 'array');| key1 | key2 |
|---|---|
| value1 | value1 |
| value2 | value2 |
| value3 | value3 |
Format: unstructured
Enthält die JSON-Datei JSON, das weder zeilengetrennt noch ein Array ist, kann unstructured verwendet werden.
Zur Demonstration nutzen wir die Beispieldatei unstructured.json:
{ "key1":"value1", "key2":"value1"}{ "key1":"value2", "key2":"value2"}{ "key1":"value3", "key2":"value3"}SELECT *FROM read_json('unstructured.json', format = 'unstructured');| key1 | key2 |
|---|---|
| value1 | value1 |
| value2 | value2 |
| value3 | value3 |
Optionen für records
Die JSON-Erweiterung kann versuchen zu erkennen, ob eine JSON-Datei Datensätze enthält, wenn records = auto gesetzt ist.
Bei records = true erwartet die JSON-Erweiterung JSON-Objekte und entpackt deren Felder in einzelne Spalten.
Weiter mit derselben Beispieldatei records.json:
{"key1":"value1", "key2": "value1"}{"key1":"value2", "key2": "value2"}{"key1":"value3", "key2": "value3"}SELECT *FROM read_json('records.json', records = true);| key1 | key2 |
|---|---|
| value1 | value1 |
| value2 | value2 |
| value3 | value3 |
Bei records = false entpackt die JSON-Erweiterung die Objekte der obersten Ebene nicht, sondern erzeugt stattdessen STRUCTs:
SELECT *FROM read_json('records.json', records = false);| json |
|---|
| {‘key1’: value1, ‘key2’: value1} |
| {‘key1’: value2, ‘key2’: value2} |
| {‘key1’: value3, ‘key2’: value3} |
Das ist besonders nützlich, wenn das JSON keine Objekte enthält, zum Beispiel arrays.json:
[1, 2, 3][4, 5, 6][7, 8, 9]SELECT *FROM read_json('arrays.json', records = false);| json |
|---|
| [1, 2, 3] |
| [4, 5, 6] |
| [7, 8, 9] |