{
  "version": 1,
  "slug": "convert-nested-json-to-csv",
  "title": "How to convert nested JSON data to CSV",
  "excerpt": "Convert nested JSON exports into clean CSV files by choosing the right row node, flattening nested objects, handling arrays, and previewing the result before download.",
  "cover": {
    "src": "/howto_images/convert-nested-json-to-csv/convert-nested-json-to-csv-cover.png",
    "optimized": "https://www.datablist.com/_next/image?url=%2Fhowto_images%2Fconvert-nested-json-to-csv%2Fconvert-nested-json-to-csv-cover.png&w=1200&q=75"
  },
  "url": "https://www.datablist.com/how-to/convert-nested-json-to-csv",
  "contentMarkdown": "\nTo convert nested JSON to CSV, use a [JSON to CSV converter online](/tools/json-to-csv) that lets you choose which JSON array becomes the CSV rows. That choice matters more than most people expect. Real JSON exports often start with metadata, pagination, or wrapper objects, while the records you need live under a path like `results`, `data.items`, or `payload.records`.\n\nI usually treat JSON to CSV conversion as three decisions:\n\n- Which array should become rows?\n- Which nested object fields should become columns?\n- Which arrays should be joined, kept as JSON, or expanded into their own rows?\n\nOnce you answer those, the rest is a normal CSV workflow. You preview the output, check the columns, and download a [CSV file](/learn/csv/csv-uses) that works in a spreadsheet, CRM, BI tool, or data cleanup workflow.\n\n> 📌 **The Short Version**\n>\n> Start by deciding what one CSV row should represent. For this example, I want one company per row, so the row node is `$.results`. After that, I can flatten company metrics and decide what to do with arrays like `contacts` and `tags`.\n\nIn this guide, I'll use a nested JSON export with 20,000 company records under `results`. The same workflow works for API responses, scraping outputs, webhook logs, CRM exports, and marketplace data where the useful records are not at the JSON root.\n\nQuick links:\n\n- [Example nested JSON file](#example-nested-json-file)\n- [Convert nested JSON to CSV in Datablist](#convert-nested-json-to-csv-in-datablist)\n- [Choose the right row node](#choose-the-right-row-node)\n- [Flatten nested JSON objects](#flatten-nested-json-objects)\n- [Handle arrays inside JSON rows](#handle-arrays-inside-json-rows)\n- [Review and download the CSV](#review-and-download-the-csv)\n\n## Example nested JSON file {#example-nested-json-file}\nFor the example, imagine a large JSON export from an API or scraping tool. The file is about 8.8 MB and contains 20,000 records under a top-level `results` array.\n\nThe root object looks like this:\n\n```json\n{\n  \"meta\": {\n    \"generatedAt\": \"2026-07-04T10:00:00Z\",\n    \"source\": \"stress_test\"\n  },\n  \"results\": [\n    {\n      \"id\": 0,\n      \"name\": \"NbDXeG4Gyg\",\n      \"website\": \"https://example-0.com\",\n      \"contacts\": [\n        {\n          \"name\": \"Ava Martin\",\n          \"emails\": [\"ava@example-0.com\"],\n          \"phones\": [\"+1 555 0100\"]\n        },\n        {\n          \"name\": \"Noah Lee\",\n          \"emails\": [\"noah@example-0.com\"],\n          \"phones\": []\n        }\n      ],\n      \"tags\": \"enterprise\",\n      \"metrics\": {\n        \"employees\": 124,\n        \"revenue\": {\n          \"amount\": 476171,\n          \"currency\": \"USD\"\n        }\n      },\n      \"createdAt\": \"2026-06-25T09:12:00Z\"\n    },\n    {\n      \"id\": 1,\n      \"name\": \"DwwGmkzmBi\",\n      \"website\": \"https://example-1.com\",\n      \"contacts\": [\n        {\n          \"name\": \"Mia Chen\",\n          \"emails\": [\"mia@example-1.com\"],\n          \"phones\": [\"+1 555 0101\"]\n        }\n      ],\n      \"tags\": [\"saas\", \"mid-market\"],\n      \"metrics\": {\n        \"employees\": 47,\n        \"revenue\": null\n      },\n      \"createdAt\": \"2026-06-26T14:33:00Z\"\n    }\n  ]\n}\n```\n\nThis is the kind of file where simple converters struggle. The records are not the root object. They are inside `results`. The records also contain nested objects, nested arrays, mixed string and array values, null values, and dates.\n\n> 🔍 **Why This File Is a Good Test**\n>\n> A flat JSON array only tests the easy case. This file tests the choices that matter in real exports: wrapper metadata, a nested record array, object fields, array fields, mixed values, and nulls.\n\nHere is the shape of the first rows:\n\n<div class=\"preview-table\">\n<div class=\"table-wrapper\">\n<table>\n<thead>\n<tr>\n<th>Row</th>\n<th>Website shape</th>\n<th>Contacts count</th>\n<th>Tags shape</th>\n<th>Revenue</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>0</td>\n<td>String</td>\n<td>2</td>\n<td>String</td>\n<td>Amount and currency</td>\n</tr>\n<tr>\n<td>1</td>\n<td>String</td>\n<td>2</td>\n<td>Array</td>\n<td>Null</td>\n</tr>\n<tr>\n<td>2</td>\n<td>Array</td>\n<td>1</td>\n<td>Array</td>\n<td>Null</td>\n</tr>\n</tbody>\n</table>\n</div>\n</div>\n\nThe target CSV should have one row per company. I want useful fields such as `id`, `name`, `website`, `employees`, `amount`, `currency`, and `createdAt` as columns. For fields like `contacts` and `tags`, I need to choose how much structure to preserve.\n\n## Convert nested JSON to CSV in Datablist {#convert-nested-json-to-csv-in-datablist}\nOpen [Datablist's JSON converter](/tools/json-to-csv). You can paste JSON into the editor or upload a `.json` file.\n\n![Datablist JSON to CSV converter with paste and upload options](/howto_images/convert-nested-json-to-csv/json-to-csv-upload-paste.png)\n\nFor a small API response, paste is fine. For a larger export, I prefer uploading the file because it avoids accidental copy-paste truncation. The file content is read in the browser, and conversion runs locally in your browser rather than being sent to Datablist servers for conversion.\n\nAfter the JSON is loaded, Datablist analyzes the structure and looks for arrays of objects. It accepts JSON roots that are arrays or objects, then scans nested paths such as `$.results`, `$.data.items`, or deeper arrays.\n\nIf the file is hard to understand, I sometimes open the JSON in [JSONCrack](https://jsoncrack.com/editor) first. It gives you a visual tree, which helps you find the array that should become rows. This is optional, but it is useful when the file has several candidate arrays.\n\nIn this example, the correct row node is:\n\n```text\n$.results\n```\n\nI choose `$.results` because I want one row per company. Each item in that array becomes one CSV row.\n\n![Row node selector showing the results array for CSV rows](/howto_images/convert-nested-json-to-csv/select-json-row-node-results.png)\n\nDatablist can recommend a row node, but I still check it manually. This is where most conversion mistakes happen. A JSON file can contain a parent array of companies, a child array of contacts, and another child array of tags or events. All of them are arrays, but only one of them matches the CSV you want.\n\n> ⚠️ **Changing the Row Node Changes the Dataset**\n>\n> `$.results` and `$.results[].contacts` are both valid row nodes, but they do not produce the same CSV. Pick the parent array when you want account rows. Pick the child array when the nested items are the dataset.\n\nFor this article, I keep the parent row node:\n\n- `$.results` means one company or account per row.\n- `$.results[].contacts` would mean one contact per row.\n\nThat second option can be correct, but it changes the output. A contact-level CSV is useful when you want a list of people. A company-level CSV is better when you want to clean accounts, enrich companies, import records into a CRM, or review metrics.\n\n## Choose the right row node {#choose-the-right-row-node}\nA row node is the JSON array whose items become CSV rows.\n\nThe most common examples look like this:\n\n<div class=\"preview-table\">\n<div class=\"table-wrapper\">\n<table>\n<thead>\n<tr>\n<th>JSON path</th>\n<th>Best when</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>$.results</code></td>\n<td>Records are stored under a <code>results</code> key</td>\n</tr>\n<tr>\n<td><code>$.data.items</code></td>\n<td>An API wraps records inside a <code>data</code> object</td>\n</tr>\n<tr>\n<td><code>$.payload.records</code></td>\n<td>Webhook or internal exports wrap records under <code>payload</code></td>\n</tr>\n<tr>\n<td><code>$.results[].contacts</code></td>\n<td>You want one nested contact per row</td>\n</tr>\n</tbody>\n</table>\n</div>\n</div>\n\nI usually ask one question before choosing: what should one row represent?\n\nIf one row should represent a company, account, order, product, listing, or event, choose the parent array. If one row should represent a contact, email, line item, price, comment, or child event, choose the child array.\n\nThis sounds simple, but it changes the whole CSV.\n\nWith `$.results`, the CSV keeps company context. The `contacts` field stays inside the company row as a nested value unless you decide to process contacts separately. With `$.results[].contacts`, the CSV becomes a contact list, but parent company fields are not automatically included unless the converter adds that behavior in a future version.\n\nMy default is to start with the parent array. It gives me a safer first export because I can still inspect the nested arrays later. I switch to a child array only when the nested items are the real dataset.\n\n## Flatten nested JSON objects {#flatten-nested-json-objects}\nNested objects are where a CSV converter needs to be more than a plain file transformer.\n\nIn the example file, `metrics` is an object:\n\n```json\n{\n  \"metrics\": {\n    \"employees\": 124,\n    \"revenue\": {\n      \"amount\": 476171,\n      \"currency\": \"USD\"\n    }\n  }\n}\n```\n\nIn a spreadsheet, I do not want a single `metrics` cell containing a JSON object. I want columns I can filter and sort:\n\n- `employees`\n- `amount`\n- `currency`\n\nDatablist detects nested object paths and lets you choose which ones to flatten. I keep the useful scalar fields flattened because they behave better in CSV tools.\n\n![Detected nested object fields in the JSON to CSV converter](/howto_images/convert-nested-json-to-csv/nested-object-fields-detected.png)\n\nFor this example, I flatten:\n\n- `metrics.employees` into `employees`\n- `metrics.revenue.amount` into `amount`\n- `metrics.revenue.currency` into `currency`\n\n![Flatten nested object settings for metrics and revenue fields](/howto_images/convert-nested-json-to-csv/flatten-nested-json-objects.png)\n\nThe expected company-level CSV looks like this:\n\n<div class=\"preview-table\">\n<div class=\"table-wrapper\">\n<table>\n<thead>\n<tr>\n<th>CSV column</th>\n<th>Source value</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>id</code></td>\n<td>Row identifier</td>\n</tr>\n<tr>\n<td><code>name</code></td>\n<td>Company or account name</td>\n</tr>\n<tr>\n<td><code>website</code></td>\n<td>Website value, joined array, or JSON string depending on settings</td>\n</tr>\n<tr>\n<td><code>contacts</code></td>\n<td>Nested contact data when exporting one company per row</td>\n</tr>\n<tr>\n<td><code>tags</code></td>\n<td>Joined labels or original text</td>\n</tr>\n<tr>\n<td><code>employees</code></td>\n<td>Value from <code>metrics.employees</code></td>\n</tr>\n<tr>\n<td><code>amount</code></td>\n<td>Value from <code>metrics.revenue.amount</code></td>\n</tr>\n<tr>\n<td><code>currency</code></td>\n<td>Value from <code>metrics.revenue.currency</code></td>\n</tr>\n<tr>\n<td><code>createdAt</code></td>\n<td>Original or formatted date</td>\n</tr>\n</tbody>\n</table>\n</div>\n</div>\n\nI prefer readable column names for the first export. If the file has repeated names in different objects, check the preview before download. For example, `billing.amount` and `revenue.amount` should not both collapse into an ambiguous `amount` column without review.\n\n> 💡 **My Default for Flattening**\n>\n> Flatten scalar fields that you want to filter, sort, or import as columns. Keep structured objects or arrays as JSON when flattening would hide meaning or create unreadable cells.\n\n## Handle arrays inside JSON rows {#handle-arrays-inside-json-rows}\nArrays need a separate decision because CSV cells hold text, while JSON arrays can mean different things.\n\nA tag list is not the same as a contact list. An email list is not the same as a list of order line items. I avoid one global rule when the arrays have different meanings.\n\nFor the example file, I would use these settings:\n\n<div class=\"preview-table\">\n<div class=\"table-wrapper\">\n<table>\n<thead>\n<tr>\n<th>Field</th>\n<th>Recommended handling</th>\n<th>Why</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>tags</code></td>\n<td>Join values</td>\n<td>Tags are simple labels and work well in one cell</td>\n</tr>\n<tr>\n<td><code>website</code></td>\n<td>Join values or keep JSON</td>\n<td>Join if you want readability, keep JSON if mixed shapes matter</td>\n</tr>\n<tr>\n<td><code>contacts</code></td>\n<td>Keep as JSON for company rows</td>\n<td>The contact objects have their own nested fields</td>\n</tr>\n<tr>\n<td><code>contacts</code></td>\n<td>Use <code>$.results[].contacts</code> as row node for contact rows</td>\n<td>Better when the contact list is the real output</td>\n</tr>\n</tbody>\n</table>\n</div>\n</div>\n\nDatablist supports array handling options such as joining values, keeping arrays as JSON strings, taking the first item, and applying settings case by case.\n\nMy default is simple:\n\n- Join simple arrays like tags.\n- Keep structured arrays as JSON strings if I need to preserve them.\n- Take the first item only when the first item has clear meaning, such as a primary email.\n- Change the row node when each array item deserves its own row.\n\nFor the company export, I keep `contacts` as a structured value because each contact has a name, emails, and phones. Flattening it into one cell would make the CSV look messy, and taking the first contact would lose data.\n\nFor a contact export, I would select `$.results[].contacts` instead. The CSV would then contain contact-level columns like:\n\n<div class=\"preview-table\">\n<div class=\"table-wrapper\">\n<table>\n<thead>\n<tr>\n<th>CSV column</th>\n<th>Source value</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>name</code></td>\n<td>Contact name</td>\n</tr>\n<tr>\n<td><code>emails</code></td>\n<td>Joined email list or JSON string</td>\n</tr>\n<tr>\n<td><code>phones</code></td>\n<td>Joined phone list or JSON string</td>\n</tr>\n</tbody>\n</table>\n</div>\n</div>\n\nThe tradeoff is context. A company export keeps the company row intact. A contact export focuses on people, but the parent company fields are not automatically copied into each contact row unless the tool supports that in a later version.\n\n## Configure output settings {#configure-output-settings}\nAfter the row node, flattening, and array settings are correct, configure the CSV output.\n\nI usually start with:\n\n- Separator: comma for standard CSV.\n- Header row: enabled.\n- Date format: keep original unless the target spreadsheet needs a friendlier date.\n\nUse a semicolon separator when your spreadsheet tool or locale expects semicolon-separated files. This can matter in European spreadsheet settings, where comma is often used as a decimal separator.\n\nFor dates, I prefer keeping the source format on the first export. If the source uses ISO timestamps, they are easy to parse later and they preserve time zone details. If the CSV is for a non-technical teammate, formatting the date can make the file easier to read.\n\nBefore downloading, check both previews:\n\n- The table preview helps you inspect rows and columns.\n- The raw CSV preview helps you inspect separators, quotes, and line breaks.\n\n> 🔑 **Preview Before Exporting**\n>\n> The preview is where you catch row-node mistakes, missing columns, messy arrays, and separator issues. I would rather spend 30 seconds there than debug a broken CRM or spreadsheet import later.\n\nI still check the raw CSV preview when arrays or multi-line text are involved. It takes a few seconds and catches a surprising number of import problems.\n\n## Review and download the CSV {#review-and-download-the-csv}\nBefore I download, I run through this checklist:\n\n- Does the row count match the selected row node?\n- Do the rows represent the entity I wanted?\n- Are `employees`, `amount`, and `currency` split into useful columns?\n- Are arrays readable, or preserved as JSON when structure matters?\n- Are null revenue values blank or clear enough for the next step?\n- Do dates look right for the spreadsheet or import tool?\n- Does the raw CSV preview use the separator I expect?\n\n![Download CSV action after reviewing the converted table](/howto_images/convert-nested-json-to-csv/download-converted-csv.png)\n\nThen download the CSV. When you upload a file, the downloaded filename can be based on the source filename, which makes it easier to trace where the CSV came from.\n\nAfter export, open the file in Datablist's [CSV editor](/csv-editor), Excel, Google Sheets, or your next data tool. In Datablist, you can continue with cleanup, filtering, deduplication, enrichment, or translation. If you generate several exports, you can [compare two CSV files](/tools/csv-diff). If the file is too large for another tool, you can [split the CSV into smaller files](/tools/csv-rows-splitter).\n\n## Expected CSV output {#expected-csv-output}\nWhen selecting `$.results`, the primary output is one company or account per row.\n\n<div class=\"preview-table\">\n<div class=\"table-wrapper\">\n<table>\n<thead>\n<tr>\n<th>CSV column</th>\n<th>JSON path inside each row</th>\n<th>Expected value</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>id</code></td>\n<td><code>$.id</code></td>\n<td>Row identifier</td>\n</tr>\n<tr>\n<td><code>name</code></td>\n<td><code>$.name</code></td>\n<td>Company or account name</td>\n</tr>\n<tr>\n<td><code>website</code></td>\n<td><code>$.website</code></td>\n<td>Website string, joined array, or JSON string</td>\n</tr>\n<tr>\n<td><code>contacts</code></td>\n<td><code>$.contacts</code></td>\n<td>Joined or JSON contact array when keeping one company per row</td>\n</tr>\n<tr>\n<td><code>tags</code></td>\n<td><code>$.tags</code></td>\n<td>Joined labels or original string</td>\n</tr>\n<tr>\n<td><code>employees</code></td>\n<td><code>$.metrics.employees</code></td>\n<td>Employee count</td>\n</tr>\n<tr>\n<td><code>amount</code></td>\n<td><code>$.metrics.revenue.amount</code></td>\n<td>Revenue amount when present</td>\n</tr>\n<tr>\n<td><code>currency</code></td>\n<td><code>$.metrics.revenue.currency</code></td>\n<td>Revenue currency when present</td>\n</tr>\n<tr>\n<td><code>createdAt</code></td>\n<td><code>$.createdAt</code></td>\n<td>Original or formatted date</td>\n</tr>\n</tbody>\n</table>\n</div>\n</div>\n\nWhen selecting `$.results[].contacts`, the output changes to one contact per row.\n\n<div class=\"preview-table\">\n<div class=\"table-wrapper\">\n<table>\n<thead>\n<tr>\n<th>CSV column</th>\n<th>JSON path inside each contact</th>\n<th>Expected value</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>name</code></td>\n<td><code>$.name</code></td>\n<td>Contact name</td>\n</tr>\n<tr>\n<td><code>emails</code></td>\n<td><code>$.emails</code></td>\n<td>Joined email list or JSON string</td>\n</tr>\n<tr>\n<td><code>phones</code></td>\n<td><code>$.phones</code></td>\n<td>Joined phone list or JSON string</td>\n</tr>\n</tbody>\n</table>\n</div>\n</div>\n\nBoth exports are valid. They answer different questions.\n\nUse the company-level export when you want to clean accounts, review firmographic data, enrich company records, or prepare CRM imports. Use the contact-level export when the people are the target dataset.\n\n## When to use this workflow {#when-to-use-this-workflow}\nThis workflow is useful whenever JSON is the source format but CSV is the working format.\n\nGood examples:\n\n- API responses with metadata, pagination, and a nested `results` array.\n- [API-based scraping](/how-to/no-code-scraping-methods-compared) outputs with listings, products, contacts, or events.\n- CRM and RevOps exports where companies contain contacts, tags, metrics, and custom fields.\n- Marketplace or [product catalog exports](/how-to/translate-ecommerce-catalog-chatgpt) with variants, prices, categories, and suppliers.\n- Webhook logs where events are nested under a payload.\n- Localization workflows where you want to [translate the resulting CSV](/how-to/translate-csv-files-online).\n\nThe pattern is the same each time. Find the array that represents the rows, flatten the object fields you need, decide how to treat arrays, and preview before exporting.\n\n## Troubleshooting nested JSON to CSV problems {#troubleshooting-nested-json-to-csv-problems}\nIf the JSON is invalid, check the source file first. Missing commas, copied console logs, trailing text, partial downloads, and unescaped quotes can break parsing. I usually validate the file before changing conversion settings because invalid JSON has to be fixed at the source.\n\nIf no row node is found, the file may not contain an array of objects. A single object with only scalar fields is not enough for this workflow. Primitive roots, strings, numbers, and single values do not create useful CSV rows.\n\nIf the wrong rows appear in the preview, change the selected row node. This usually means the converter found an array, but not the array you had in mind. Look for the path where the records live, such as `$.results`, `$.data.items`, or `$.payload.records`.\n\nIf contacts, tags, line items, or events are hard to read, adjust the array handling. Join simple lists. Keep structured arrays as JSON when you want to preserve detail. Switch to a child row node when each nested item should become a row.\n\nIf a large file feels slow, remember that browser and device performance still matter. Datablist runs parsing and conversion in a web worker, so the conversion work does not run on the main interface thread, but your local memory and CPU still set practical limits.\n\nIf the CSV does not import correctly elsewhere, try a different separator, keep the header row enabled, and inspect the raw CSV preview. Quoting and line breaks can matter when JSON values contain text, arrays, or nested objects.\n\n## What happens in the browser {#what-happens-in-the-browser}\nDatablist parses and converts the JSON in a browser worker. The worker analyzes candidate row nodes, caches the parsed object, converts the selected node to CSV, and returns the preview and result to the interface.\n\nThis matters for two reasons.\n\nFirst, the conversion work does not run on the main UI thread. That helps the page stay usable while the file is analyzed.\n\nSecond, processing happens locally in your browser rather than being sent to Datablist servers for conversion. This is useful when you are handling API exports, scraping outputs, or internal data files and do not want to upload them to a server-side converter.\n\nI would still follow your usual data handling rules. Local browser processing is helpful, but it does not replace your company's privacy and compliance policies.\n\n## Conclusion {#conclusion}\nNested JSON to CSV conversion is mostly about choosing the right row node. Once you pick the array that should become rows, the rest becomes more manageable.\n\nFor the example file, `$.results` gives one company per row. Flattening `metrics.employees`, `metrics.revenue.amount`, and `metrics.revenue.currency` creates useful spreadsheet columns. Array settings decide whether fields like `tags`, `website`, and `contacts` become readable text, preserved JSON, or a separate contact-level export.\n\nOpen the [JSON to CSV converter](/tools/json-to-csv), upload a nested JSON export, select the row node, review the preview, and download the CSV. Then open the exported file in Datablist's [CSV editor](/csv-editor) if you need cleanup, filtering, deduplication, enrichment, or translation.\n\n## FAQ {#faq}\n### How do I convert nested JSON to CSV? {#how-do-i-convert-nested-json-to-csv}\nUse a converter that lets you select the JSON array that becomes rows. In Datablist, paste or upload the JSON, choose the row node, flatten useful nested object fields, configure array handling, preview the table, and download the CSV.\n\n### Can I convert JSON to CSV when records are under `results`? {#can-i-convert-json-to-csv-when-records-are-under-results}\nYes. Select `$.results` as the row node when each item under `results` should become a CSV row.\n\n### How do I convert `data.items` or `payload.records` to CSV? {#how-do-i-convert-dataitems-or-payloadrecords-to-csv}\nChoose `$.data.items` or `$.payload.records` as the row node if that path contains the objects you want as rows. The exact path depends on the JSON structure.\n\n### How do I flatten nested JSON fields into CSV columns? {#how-do-i-flatten-nested-json-fields-into-csv-columns}\nEnable flattening for nested object paths such as `metrics.revenue`. Then review the generated columns in the preview before export.\n\n### How should I handle arrays inside JSON rows? {#how-should-i-handle-arrays-inside-json-rows}\nJoin simple lists such as tags, keep structured arrays as JSON strings when you need to preserve them, or choose a deeper row node when each array item should become its own row.\n\n### Can I convert a large JSON file to CSV online? {#can-i-convert-a-large-json-file-to-csv-online}\nYes, if your browser and device can handle the file. Datablist uses a web worker for parsing and conversion, but very large files still depend on local performance.\n\n### Is an online JSON to CSV converter safe for private data? {#is-an-online-json-to-csv-converter-safe-for-private-data}\nDatablist's converter processes the file locally in your browser instead of sending it to Datablist servers for conversion. You should still follow your organization's data handling rules.\n\n### What is a row node in JSON to CSV conversion? {#what-is-a-row-node-in-json-to-csv-conversion}\nA row node is the JSON array whose items become CSV rows. For example, `$.results` creates one CSV row for each object inside the `results` array.\n\n### What happens if I choose `$.results[].contacts` instead of `$.results`? {#what-happens-if-i-choose-resultscontacts-instead-of-results}\nThe CSV becomes one row per contact instead of one row per company or account. Parent company fields are not automatically included unless the tool supports that behavior later.\n\n### What should I do after exporting the CSV? {#what-should-i-do-after-exporting-the-csv}\nOpen it in Datablist or another spreadsheet tool to clean, filter, deduplicate, enrich, translate, or import it into another system.\n"
}