The natural alternative to keep-intact is row-explode, where each array element becomes its own row and parent fields are duplicated across rows. Explode is friendly for spreadsheet analysis because each element can be filtered independently. But explode breaks the one-record-one-row invariant, which matters when the CSV is meant to mirror the source JSON faithfully, or when row count drives downstream logic (such as row count being the number of orders, not the number of line items across all orders).
Keep-intact preserves the invariant. Each record produces exactly one row. Arrays within the record become JSON-encoded strings in their respective cells. The cell content is a single line of compact valid JSON like ["a","b","c"] or [{"id":1},{"id":2}]. Spreadsheet apps display the cell as plain text; analysts can copy the cell into a JSON viewer or re-parse in code if they need to drill in.
Lossless preservation is the other key benefit. A JSON-encoded array cell contains every element and every nested field of every element. Re-parsing the cell with JSON.parse or json.loads recovers the original array exactly. This makes keep-intact the right choice for archival CSVs, for round-trip workflows where the CSV may be re-imported to JSON, and for any case where downstream code may need to access the array structure programmatically.
The downside is spreadsheet analysis of the array contents. A pivot table cannot pivot on a field inside a JSON-encoded cell because the spreadsheet sees the cell as opaque text. If your analyst needs to filter on a specific array element's field, run a second conversion in explode mode and hand them that version alongside the keep-intact version. Many teams keep both for different purposes.