Rows come from objects and columns come from member names
The input must be a non-empty top-level array whose elements are objects. Tool Swim discovers headers in first-seen order across all records, then writes one row per object. A member missing from a later record becomes an empty cell, while explicit null also becomes an empty cell in this focused export.
Strings containing a delimiter, quote, carriage return, or newline are enclosed in double quotes, and embedded quotes are doubled. Numbers and booleans use their JSON text representation. The output uses CRLF record endings for broad spreadsheet compatibility.