Skip to content
OneKitly

Two Emails in One Cell, or Two Strings in an Array

Published 9/9/2026 · 3 min read · File tools

Daniel Okonkwo

Daniel Okonkwo — Front-end developer and tech writer at OneKitly

Web performance · File formats

Checked against 3 sources

View profile →
In short

vCard lets a contact repeat a property: two EMAIL lines, three TEL lines, as many as the person has. A spreadsheet cell holds one value, so the CSV export joins them — jp.dupont@example.fr · contact@example.fr, separated by a middle dot chosen because it almost never appears inside an address or a phone number. That is readable and sortable, and it is a string. The JSON export writes the same contact as an object where emails and phones are arrays: ["jp.dupont@example.fr", "contact@example.fr"]. If a person is going to read the file, the joined cell is friendlier; if a program is, the array removes the step where you decide what to split on and hope no contact ever put that character in a note. Everything else is the same, because both are the same parse of the same file.

A contact can have several phone numbers and several addresses. The CSV joins them with a middle dot into one cell; the JSON keeps them as a list, which is the difference between a script that works and one that splits on a guess.

Why the separator is a middle dot

A comma would be indistinguishable from the CSV's own separator, a semicolon from the one Excel uses across continental Europe, and a slash appears in real addresses. The middle dot appears in almost nothing anyone puts in a contact card, which makes a joined cell splittable in practice even though nothing guarantees it. That is the honest description: a convention that works, not a rule the format enforces — which is precisely why a program should take the JSON.

What neither export carries

The labels. A vCard says which number is the mobile and which the office, with TYPE=CELL and TYPE=WORK, and both exports write the numbers without them — the CSV because it has one phones column and the JSON because it stores a list of strings rather than a list of pairs. If the distinction matters to you, keep the .vcf, or add a column of your own before you import. It is a real limit and worth stating rather than discovering after two hundred contacts have landed with their mobiles labelled as landlines.

VCF to JSONExport a vCard address book as structured JSON, with emails and phones as arrays.Try the tool →

Frequently asked questions

Can I edit the JSON and convert it back?
The import side of these tools reads CSV, so a JSON you have edited needs a script of your own to become a .vcf again — which is usually the situation you were in anyway if you chose JSON. For hand edits that must come back through the tools, take the CSV, change it in a spreadsheet and rebuild from there.
Is the JSON valid for any parser?
Yes — it is a plain array of objects, indented, UTF-8, with no trailing commas and no comments. Note that it is not jCal, the standardised JSON form of vCard and iCalendar: it is a straightforward representation of the fields these tools read, which is easier to consume and carries less. If you need jCal specifically, keep the .vcf and convert it with a library that targets it.

Articles you may find interesting

All guides →
ComparisonThree vCard Versions, and the Same Person in Each2.1 marks types without an equals sign, 3.0 is what everything reads, 4.0 writes some values as URIs — so a phone can arrive as tel:+33612345678, prefix included. Knowing which you have explains most import surprises.ExplainerA vCard Address Has Seven Parts, and a CSV Column Has OneNames, addresses and organisations are structured fields in a vCard. Flatten them into a spreadsheet and they read identically while losing the seams — which matters the moment you build a vCard back out of that spreadsheet.ComparisonThe JSON Export Keeps Three Things the CSV Has No Column ForSame file, same parser, two outputs. The spreadsheet gets eight columns; the JSON gets the named time zone, the all-day flag and the recurrence rule as well.How-toYou Do Not Have to Rename Your Columns to EnglishThe header row is matched in six languages, so prénom, apellidos, Vorname and cognome are all understood. One header is genuinely ambiguous — nom — and it is settled by the column next to it.How-toMerging Calendars and Address Books Appends — It Does Not DeduplicateThe merge tools put every record from every file into one output, in the order you gave them. That is the right default and the one thing to know before you feed in two exports of the same account.ExplainerA Recurring Event Is One Line in the CSV, Not TwelveAn .ics file stores a weekly meeting once, with a rule attached. Export it to CSV and you get a single row for the whole series — which is the file being honest, not the converter losing rows.

Related tools

Sources

Spotted a mistake in this article?