{
  "slug": "csv",
  "title": "csv ⇄ json converter",
  "description": "CSV to JSON and back — quoted fields, custom delimiters, header-row toggle. Values stay strings.",
  "category": "convert",
  "status": "live",
  "url": "https://aaronchartier.com/tools/csv",
  "keywords": [
    "csv",
    "json",
    "convert",
    "delimiter",
    "tsv",
    "spreadsheet"
  ],
  "samples": [
    {
      "label": "csv → json",
      "query": "input=name%2Cage%0Aada%2C36%0Agrace%2C45&mode=csv2json"
    },
    {
      "label": "json → csv",
      "query": "input=%5B%7B%22name%22%3A%22ada%22%2C%22age%22%3A36%7D%5D&mode=json2csv"
    }
  ],
  "privacy": "all computation is client-side; no input is transmitted",
  "pageApi": "window.__tools[\"csv\"] — run(input), describe(); output in #tool-output",
  "params": {
    "input": "CSV text (csv2json) or JSON text (json2csv) (`#input=` pre-fills and auto-runs)",
    "mode": "'csv2json' | 'json2csv' (default csv2json; `#mode=`)",
    "delimiter": "field delimiter — ',' ';' '|' or 'tab' (default ','; `#delimiter=`)",
    "header": "boolean — first row is a header / emit a header row (default true; `#header=`)"
  },
  "returns": "{ ok, mode, output?, rows?, columns?, error?: { message, line } } — csv2json values stay strings; json2csv accepts arrays of objects/arrays/primitives or one object",
  "example": {
    "run": {
      "input": "name,age\nada,36",
      "mode": "csv2json"
    }
  }
}