DuckDB reads JSON like it reads CSV — point a query at the file:
SQL
SELECT * FROM read_json_auto('events.json');
Nested objects arrive as structs; arrays arrive as lists. Reach into a struct with dot notation:
SQL
SELECT payload.user.id, payload.action
FROM read_json_auto('events.json');
Tip
DESCRIBE SELECT * FROM read_json_auto('events.json') shows the
inferred shape before you write a single projection.