feat: add Converter node for CSV <-> JSON conversion - #429
Conversation
|
Hi @asimodabas 👑 Thanks for this, it is a clean contribution. The Converter naming, the modular Three things before we merge:
One more: the original proposal had trimValues, defaulting to true. It is not in And once again, thank you for your time and effort. We're so close to merging this MR. 🚀🔥 |
…mmary, BOM/duplicate-header/tab handling, trimValues
|
Thanks, good catches 🪄 . Pushed fixes for all four:
Added tests for the BOM, duplicate-header, tab and trim cases, plus a Playwright check for the trim toggle. check.sh and e2e are green locally. |
…ment trimValues quoted-field behavior
|
Nice catch on the dedupe collision. Fixed it so the suffix keeps bumping until the candidate is actually free it now skips both already-used names and real columns elsewhere in the header, so nothing gets dropped:
The real Also added a docs line: Thanks for the careful reviews 🙏 |
ckakgun
left a comment
There was a problem hiding this comment.
Thanks for the quick turnarounds across all three rounds @asimodabas. Nice first
contribution, hope to see more 🥇
The converter node landed in heymrun#429 with a minimal DSL entry that listed the fields but not their behavior, so the assistant had no signal about when to reach for the node or what the non-default settings do. - Document the "\t" delimiter for tab-separated values - Note that hasHeader:false yields arrays of cell values, not objects - Explain what trimValues:false preserves inside quoted fields - Note that converterColumns falls back to inferring columns from row keys - Document the $label.conversion echo key alongside $label.result - Add a worked csvToJson example with its resolved output - Steer CSV work to the converter node instead of an execute or llm node, since RFC 4180 quoting, embedded newlines, and BOM stripping are already handled there Prompt text only, no behavior change.

Adds a
converternode for format conversion inside workflows, as discussed in #423.What
A technology-neutral Converter node (Data category, 1 input / 1 output, no credentials). First conversions:
csvToJson— CSV text → array of row objects (or arrays when there is no header)jsonToCsv— array of objects/rows → CSV textThe
conversionfield leaves room for more formats later without changing the node's contract. Parsing/formatting uses Python'scsvmodule, so quoting, embedded delimiters, and newlines follow RFC 4180. Output is exposed as$label.result.Wiring (per AGENTS.md)
Tests
The change is purely additive and doesn't touch existing node behavior.
./check.shand the E2E suite pass locally.