Zum Inhalt springen

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]