JSON to CSV Converter
Flatten JSON data into CSV format for spreadsheet import. Handles nested objects by creating dotted column names and arrays by creating numbered columns.
How Flattening Works
Simple key-value pairs become columns directly. Nested objects use dot notation: {address: {city: "NYC"}} becomes column "address.city". Arrays are expanded into numbered columns or separate rows (configurable).
Configuration
- Delimiter: Comma, semicolon, or tab
- Flatten depth: How many nesting levels to flatten
- Array handling: Expand to columns or repeat rows
- Null handling: Empty string, "null", or "N/A"
Data Loss Considerations
CSV is flat, JSON is hierarchical. Some data structure is inevitably lost. Deeply nested objects may produce many columns. Complex arrays may not flatten cleanly. Always verify the output matches expectations.
Practical Tips
- For deeply nested JSON, consider extracting specific fields first
- Use the tool to quickly inspect JSON data in spreadsheet format
- Export to CSV for sharing with non-technical stakeholders
- Test with a small sample before converting large datasets
When a Google Takeout Dump Becomes 12,000 JSON Files: A Real Use Case for JSON to CSV
Here is a scenario that happens more often than developers admit. You export your Google Photos library through Takeout, unzip the archives, and find that every single image — every birthday shot, every landscape, every blurry cat photo taken at 2am — has a companion .json file sitting next to it. Inside each file: timestamp, GPS coordinates, camera model, album membership, title. Across 12,000 photos, that is 12,000 JSON files containing data that Google's own interface will never let you search or filter properly.
This is the exact problem that a JSON to CSV converter exists to solve. Not abstractly, not theoretically — concretely, with a pile of structured data that needs to become a spreadsheet so a human being can actually do something with it.
What the Tool Actually Does to Your Data
JSON and CSV represent opposite philosophies about how data should travel. JSON lets you nest objects inside objects, attach arrays to keys, and build structures that mirror real-world relationships. CSV flattens everything onto a grid where every row is one thing and every column is one attribute of that thing. A JSON to CSV converter's whole job is negotiating that philosophical difference without losing what matters.
For flat JSON — an array of objects where each object has the same keys — the conversion is mechanical. Paste the JSON, click convert, download the CSV. Done in under five seconds. Where things get interesting is nested data. Consider what a typical Google Photos metadata JSON actually looks like:
- A top-level
titleanddescription - A
photoTakenTimeobject with atimestampand aformattedstring nested inside it - A
geoDataobject containinglatitude,longitude, andaltitudeas sibling keys - A
geoDataExifobject that might differ fromgeoDataif the photo was moved
A good JSON to CSV tool will flatten these nested objects by joining the key path with a dot or underscore: photoTakenTime.timestamp becomes its own column, geoData.latitude becomes another. The output CSV ends up with columns like geoDataExif_latitude and photoTakenTime_formatted — which is verbose, but you can rename columns in a spreadsheet in thirty seconds. What you cannot do is manually dig through 12,000 JSON files looking for which ones have GPS data.
The Photo Catalog Workflow, Step by Step
Suppose you have exported your Google Photos library and want to answer a simple question: which photos were taken in Portugal, and on what dates? Here is how a JSON to CSV converter fits into that workflow.
- Combine the individual JSON files into one array. Most converters expect either a single JSON object or a JSON array as input. On a Mac, you can run a quick terminal command to merge all the individual metadata files into a single array:
jq -s '.' *.json > all_metadata.json. This takes a folder of 500 separate files and wraps them in one array. - Paste or upload to the converter. Tools like CSVJSON's json2csv or ConvertCSV's JSON-to-CSV converter accept either pasted text or file uploads. CSVJSON in particular removed file size limits, so even a merged file representing thousands of photos loads without complaint.
- Choose your flattening strategy. Most tools offer a checkbox or option to flatten nested objects. Enable it. Without flattening, the entire
geoDatablock becomes a stringified object crammed into one cell — useless for filtering. - Download and open in Google Sheets or Numbers. Filter by
geoData_latitudebetween 36.9 and 42.2 (Portugal's rough north-south span) andgeoData_longitudebetween -9.5 and -6.2. Every matching row is a photo taken in Portugal.
That is genuinely useful work that the JSON to CSV tool enables. Not busywork — actual discovery from your own data that Google Photos' search won't surface.
Separator Choice Matters More Than You'd Expect
One setting that trips up a lot of people: the delimiter. Standard CSV uses commas, which causes immediate problems if any of your data contains commas — a photo title like "Lisbon, Portugal - sunset" will break naive parsers unless the field is properly quoted. Better converters handle this automatically by wrapping affected values in double quotes. But there is a secondary issue: Excel on European system locales uses semicolons as the default CSV delimiter, not commas. If you open a comma-delimited CSV in French or German Excel, the entire file appears as one column.
CSVJSON's converter explicitly offers tabs (producing TSV instead of CSV) and semicolons as delimiter alternatives. For photo metadata that you intend to open in Excel on any regional locale, switching to tab-delimited is the safest move. Tab characters almost never appear in camera metadata fields, so there is no quoting ambiguity.
The Arrays Problem: When One Photo Belongs to Multiple Albums
Google Photos JSON metadata sometimes includes an albumData field that is itself an array — a photo can belong to "Portugal 2023," "Best Of," and "Family" simultaneously. This is where JSON-to-CSV conversion forces a real decision, because a CSV row can only hold one value per cell.
The two strategies available are:
- Explode the array into multiple rows. The photo appears three times in the CSV, once per album. This is correct for relational analysis but inflates your row count and makes per-photo operations annoying.
- Concatenate into a single cell. Album names get joined as
"Portugal 2023 | Best Of | Family"in one column. Loses relational structure but keeps one row per photo.
Most browser-based JSON to CSV tools default to concatenation or simply stringify the array as ["Portugal 2023","Best Of","Family"]. If you need the exploded version for proper analysis, Python's pandas.json_normalize() with the record_path argument handles this cleanly — but for a quick answer to "which albums does this photo belong to," the stringified version in a single column is readable enough.
Data Integrity: The Silent Failures to Watch For
Three things can silently corrupt a JSON-to-CSV conversion in ways that look fine until you actually use the data.
Timestamp strings becoming scientific notation. Some photo metadata stores Unix timestamps as large integers: 1693526400. Paste this into Excel without protection and a column formatted as "General" may display it as 1.6935E+09, losing the last digits. Force that column to "Number" with zero decimal places before you start filtering dates.
GPS coordinates losing precision. Latitude stored as 38.71667 in JSON should survive the CSV round-trip intact. But some converters serialize floating-point values with platform-dependent precision, occasionally rounding to 38.7167. At GPS scale, that shifts your location by roughly 10 meters — fine for "was this photo taken in Lisbon," catastrophic for any survey or forensic work. Check a known coordinate against the original JSON after conversion.
BOM encoding issues with accented characters. Photo titles containing accented characters (café, Ñoño, Zürich) can become garbled when a CSV is opened in Excel if the file lacks a UTF-8 BOM header. CSVJSON specifically documented and fixed this issue. If your photo titles include non-ASCII characters, choose a converter that explicitly mentions UTF-8 BOM support, or open the CSV in Google Sheets rather than Excel, which handles encoding more gracefully.
What This Tool Cannot Replace
A browser-based JSON to CSV converter is the right tool for one-off conversions, ad-hoc exploration, and situations where you need to quickly share structured data with someone who thinks in spreadsheets. It is not the right tool for a repeating pipeline. If you are exporting photo metadata monthly or processing API responses on a schedule, write the Python: five lines with pandas.json_normalize() and df.to_csv() will do exactly what the browser tool does, reproducibly, without clicking anything.
The browser converter earns its keep precisely in the moment before you decide whether something is worth automating. You have a JSON file, you need to see it as rows, you need to see it now. Paste it in. Thirty seconds later you know whether the data is what you thought it was — and whether it is worth building a pipeline around.
For anyone managing a photo library that has grown past the point where any single application can organize it meaningfully, that thirty-second feedback loop is genuinely valuable.