A deliberately constructed contact-migration test produced a result that is easy to misread: a flat CSV imported cleanly, and all three rows came back. The reconstructed contacts still differed from their originals in nine contact fields.
This was a constructed synthetic demonstration, not real product testing or an AI benchmark. The input contained three invented contacts. Each had an identifier, a name, two labelled phone numbers, two tags and a note.
What the narrow format dropped
The first export used only three columns: id, name and phone. Its exporter selected the first phone number. The matching importer recreated one unlabelled number, an empty tag list and an empty note. Names and first numbers survived. String identifiers such as 0007 kept their leading zeroes.
For each contact, the phone list, tag list and note changed. Across the three contacts, that meant three secondary numbers disappeared, all six phone labels disappeared, all six tags disappeared and all three notes disappeared. Counting imported rows would have reported success while missing every one of those losses.
The difference is in the schema, not in the comma. A representation that stores only one scalar phone value cannot preserve a list of labelled numbers. A representation that stores the list as structured data can, provided the importer understands that structure.
Here is the small self-contained comparison used for the illustrative example:
import json
contact = {
"id": "0007",
"phones": [{"label": "mobile", "number": "+1-202-555-0101"}],
}
flat_row = {"id": contact["id"], "phone": contact["phones"][0]["number"]}
complete_row = {
"id": contact["id"],
"phones_json": json.dumps(contact["phones"]),
}
print(flat_row["id"], flat_row["phone"])
print(json.loads(complete_row["phones_json"])[0]["label"])
0007 +1-202-555-0101
mobile
The full demonstration also tried a versioned JSON export and a CSV whose list fields were JSON-encoded. Both reconstructed the three synthetic contacts exactly. That result applies to those deliberately paired exporters and importers; it does not prove that another application will understand the same encoding or support every field.
Before moving an address book
- Create disposable test contacts with multiple labelled numbers, several tags, a multiline note and, if supported, an identifier with a leading zero.
- Export them and import into a separate test address book.
- Compare fields individually: secondary numbers, labels, tags, notes and identifier types. Do not stop at the contact count.
- Keep the original address book and its backup until those checks pass.
An export is a schema even when it looks like a harmless spreadsheet. The row count tells you how many records crossed the boundary; the fields tell you whether the address book did.
No comments:
Post a Comment
Comments are allowed as long as they touch the post in question and they do no contain any spam or crap.