The dot-notation convention is straightforward: a header like customer.name produces a top-level customer object containing a name property, while customer.address.city produces customer.address.city three levels deep. FixTools reads each header, splits it on dots, and assembles an empty path skeleton during the first pass. On the second pass, the value for each row is assigned to the leaf position. Two headers that share a prefix automatically share the parent object in the output, so address.city and address.zip both land inside the same address object rather than creating two independent ones. This makes building rich JSON structures from a spreadsheet practical even for users with no scripting background.
For sibling objects across rows, the same header structure repeats for each row. Each CSV row becomes one fully-nested JSON object in the output array. If a particular row leaves some nested cells empty, the corresponding leaf becomes null or empty string depending on your type-inference settings, but the parent object structure is still created so the consumer can rely on a consistent schema. If you have rows where the nested object should be entirely omitted rather than present-with-nulls, post-process the JSON with a tiny script or jq filter after conversion. The converter prioritises structural consistency, which is the right default for downstream code that expects predictable keys.
Arrays inside objects need a slightly different notation. FixTools supports a bracketed-index syntax in headers: tags[0] and tags[1] become a tags array with two elements per row. Mixed array-of-object syntax also works: items[0].sku, items[0].qty, items[1].sku, items[1].qty produces an items array containing two objects each with sku and qty. The bracket-index notation is verbose but explicit, and it lets a flat CSV represent fairly rich structures without requiring a separate file per array. For arrays whose length varies per row, leave the extra columns empty and the converter will trim trailing null elements to keep the output clean.
The nested conversion still respects the same privacy and type-inference rules as the flat converter. Your data does not leave the browser. Numeric leaf cells become JSON numbers when the entire column is numeric, booleans become true booleans, and missing values are represented consistently. This combination of structural depth and clean typing makes the nested converter useful for everything from seeding development databases with realistic test data to feeding API gateways that expect richly structured payloads. The spreadsheet remains the authoring surface and the JSON is just the wire format.