Skip to content
UtilPick.
My toolbox
All tools
Favorites
Saved tools

Loading…

Recently used

Tools you open will appear here.

Get the desktop app
Settings
UtilPick.
All tools
All tools/CSV to JSON

CSV to JSON

Convert between CSV and JSON and check the result as a table. Nothing you enter is sent to a server.

Loading the tool…

User reviews

No reviews yet. If you’ve used this tool, be the first to leave one.

User reviews

No reviews yet.

Write a review

Checking your sign-in status…

    From first step to finished result

    CSV to JSON: complete guide

    Walk through the steps and examples, or jump straight to the topic you need.

    How to use
    Examples & choices
    Troubleshooting
    FAQ

    At a glance

    Direction
    Supports both CSV to JSON and JSON to CSV.
    Delimiter
    Choose one yourself: comma, tab, semicolon, or pipe.
    Quotes
    Delimiters and line breaks inside quotes are read as text, and two quotes in a row are read as one.
    BOM and CRLF
    The BOM is removed when reading; saved files get a BOM and CRLF line breaks.
    Value format
    By default every value stays as text, which keeps leading zeros.
    Formula protection
    When exporting to CSV, a single quote is added before values starting with = + - @.
    Limits
    Converts up to 500,000 characters, 20,000 rows, and 200 columns.
    Where it runs
    Conversion happens in this browser, and your input is not stored.

    How to use CSV to JSON

    1. 01

      Pick the direction and delimiter first

      Choose between CSV to JSON and JSON to CSV. Changing the direction clears the input and keeps only the options that apply. The delimiter is chosen by you rather than guessed, so if your table is read as a single column, try a different delimiter.

    2. 02

      Decide how to treat column names and values

      Using the first line as column names gives you an array of objects; turning it off gives you an array of arrays. Empty column names are filled with a position number such as Column 2, and duplicate names get _2 appended to tell them apart. With type conversion off when reading CSV, every value stays as text, so leading zeros in phone numbers and postal codes survive. With it on, 12 becomes a number and true becomes a boolean, but values with a leading zero such as 0102 are still kept as text. You also decide here whether empty cells are exported as null.

    3. 03

      Convert and check the table

      You can also run it with Ctrl or ⌘ plus Enter. In the table preview below, check that column names and values landed where you expected. It shows up to the first 50 rows and tells you how many rows remain.

    4. 04

      Copy or save

      Copying the result copies the text exactly as shown. Saving as CSV puts a byte order mark (BOM) at the start of the file and uses CRLF line breaks so Excel doesn't garble non-ASCII text. You can also press convert in reverse to move the result you just made into the input in the opposite direction, which lets you check a round trip.

    What it’s good for

    Turn a spreadsheet table into data for developers

    Paste a table exported as CSV from a spreadsheet, pick a delimiter, and you get a JSON array. If the first line is used as column names, you get an array of { column: value } objects; if you turn that off, you get an array of arrays of values. Values are kept as plain text by default, so leading zeros in phone numbers or postal codes are not lost. If you need numbers and true/false values, turn on the type conversion option.

    Turn data into a table a spreadsheet can open

    When converting a JSON array to CSV, columns are created in the order keys first appear across the items. Keys missing from an item are left blank, so columns never get misaligned. Nested objects and arrays can be put into one cell as JSON text or flattened into a.b style columns. So that Excel doesn't garble non-ASCII text, the saved file includes a byte order mark (BOM) and uses CRLF line breaks.

    Worked examples

    Reading a table with a comma inside a value

    Input and settings
    name,note,phone
    Haneul,"Seoul, Gangnam",01012345678
    Result
    [
      {
        "name": "Haneul",
        "note": "Seoul, Gangnam",
        "phone": "01012345678"
      }
    ]
    A comma inside quotes does not split the cell. With the default setting, where type conversion is off, the leading 0 of the phone number is kept too.

    Exporting data that has nested values

    Input and settings
    [{"name":"Haneul","address":{"city":"Seoul","district":"Yeoksam"}},{"name":"Bada"}]
    Result
    Insert as JSON text
    name,address
    Haneul,"{""city"":""Seoul"",""district"":""Yeoksam""}"
    Bada,
    
    Flatten into a.b columns
    name,address.city,address.district
    Haneul,Seoul,Yeoksam
    Bada,,
    The second item has no address, so its cell is blank. If you choose flattening, each nested key becomes its own column, which is easier to work with directly in a spreadsheet.

    Choosing export options

    Swipe the table sideways to see the rest.

    Choosing export options
    OptionOnOff
    Byte order mark for Excel (BOM)Excel does not garble non-ASCII text.You get a plain UTF-8 file with no mark.
    Formula protectionA single quote is added before values starting with = + - @.Values go out unchanged, and a spreadsheet may run them as formulas.
    Nested valuesPut into one cell as JSON text, or flattened into a.b columns.Not applicable. You must choose one of the two.

    When the result isn’t what you expected

    The whole table is read as a single column

    The delimiter you chose differs from the one in the actual file. Excel often exports with semicolons depending on regional settings, and text copied from a spreadsheet is usually tab-separated. Change the delimiter and convert again.

    It says a quote was not closed

    A quoted cell never ended. The message also tells you which line to start from, so count the quotes from that line. A quote inside a value must be written twice.

    It says the outermost level must be an array

    To convert JSON to CSV, the items that correspond to table rows must be wrapped in an array. If you have just one { … }, wrap it in brackets like [ { … } ].

    A single quote was added in front of a value

    This mark is added so a spreadsheet does not run a value starting with = + - @ as a formula. The number of cells changed is shown below the result. If you don't need it, turn the option off and convert again.

    Rows have different numbers of cells

    Rows with too few cells are padded with empty values, and rows with more cells than the first line get generated names such as Column 3 so the values are kept. No value is dropped, and you are told how many were handled this way.

    Key terms

    Delimiter
    The character that separates cells. A comma is the most common, and some regional settings use a semicolon.
    BOM
    A character mark at the start of a file. It lets Excel read non-ASCII text as UTF-8.
    CRLF
    A way of writing a line break with two characters. Windows programs mostly use it.
    Formula injection
    The problem of a table value being executed as a formula in a spreadsheet. It is prevented by adding a single quote before the value.

    CSV to JSON FAQ

    Can a quoted cell contain commas or line breaks?

    Yes. Inside a quoted cell, delimiters and line breaks are read as ordinary characters, and two quotes in a row are read as one quote. If a quote is never closed, the tool tells you which line to start checking from.

    Why is there a single quote in front of some values?

    Values starting with = + - @ can be executed as formulas in Excel or Google Sheets. So when exporting to CSV, a single quote is added only in front of such values, and the tool tells you how many cells were changed. If you don't need this, turn the option off.

    What happens if rows have different numbers of cells?

    Rows with too few cells are padded with empty values, and rows with more cells than the first line get generated names such as Column 3 so no value is lost. In both cases, the number of rows handled this way is shown below the result.

    Can I feed in an Excel file (xlsx) directly?

    No. Export it from Excel as CSV and paste the contents. This tool only handles text-based CSV and JSON.

    If I convert and then convert back, are the values unchanged?

    With default settings, an automated test confirms that a round trip between CSV and JSON keeps values unchanged. However, with formula protection on, the added single quote stays as part of the value, so turn that option off if you only want to check a round trip.

    How large a file can it handle?

    Up to 500,000 characters, 20,000 rows, and 200 columns. If you go over, it tells you the current size, and you can convert in smaller parts.

    Is my data sent to a server?

    No. Conversion happens inside this browser, and neither the input nor the result is stored.

    Jump to a topic

    • #CSV to JSON
    • #choose delimiter
    • #export options
    • #nested data
    • #quote error
    • #formula injection

    Reviewed 2026.09.09

    Related tools

    View all
    JSON FormatterDeveloper
    Text CompareText
    Character CounterText
    UtilPick

    Simple tools for a complicated day. A free collection of online utilities.

    Service

    About UtilPick Get the desktop app

    Help

    Request a toolReport a problemContactinfo@utilpick.com

    Policies

    Privacy Policy (Korean)Terms of Use (Korean)
    Business registration no. 365-47-00936 (Republic of Korea)
    © 2026 UtilPick
    Featured on Twelve ToolsUtilPick - Featured on Startup FameFazier badgeFeatured on LaunchIgniter
    HomeSearchSavedMore
    Convert between tables and data

    Convert

    Direction
    Input delimiter

    58 chars · max 500,000

    Done · 203 chars

    Conversion happens only in this browser. You can also press Ctrl or ⌘ + Enter.

    Parsing rules and limits

    Converts up to 20,000 rows and 200 columns. Delimiters and line breaks inside quotes, doubled quotes (""), BOM, and CRLF are all read by the rules. When exporting CSV, values starting with = + - @ get an apostrophe so spreadsheets don’t run them as formulas.

    Table preview

    3 columns · 3 rows

    Table showing the converted result in columns and rows
    #nameagecity
    1Alex29Seattle
    2Mia34Boston
    3Noah41Denver