KKitForma.

Language

EnglishEnglishTürkçeTurkishDeutschGermanBlog unavailable in this language · open toolsEspañolSpanishBlog unavailable in this language · open toolsFrançaisFrenchBlog unavailable in this language · open toolsPortuguêsPortugueseBlog unavailable in this language · open toolsItalianoItalianBlog unavailable in this language · open toolsNederlandsDutchBlog unavailable in this language · open toolsPolskiPolishBlog unavailable in this language · open toolsРусскийRussianBlog unavailable in this language · open toolsУкраїнськаUkrainianBlog unavailable in this language · open toolsSvenskaSwedishBlog unavailable in this language · open toolsNorskNorwegianBlog unavailable in this language · open toolsDanskDanishBlog unavailable in this language · open toolsSuomiFinnishBlog unavailable in this language · open toolsČeštinaCzechBlog unavailable in this language · open toolsRomânăRomanianBlog unavailable in this language · open toolsΕλληνικάGreekBlog unavailable in this language · open toolsالعربيةArabicBlog unavailable in this language · open toolsעבריתHebrewBlog unavailable in this language · open toolsفارسیPersianBlog unavailable in this language · open toolsاردوUrduBlog unavailable in this language · open toolsहिन्दीHindiBlog unavailable in this language · open toolsবাংলাBengaliBlog unavailable in this language · open toolsதமிழ்TamilBlog unavailable in this language · open toolsతెలుగుTeluguBlog unavailable in this language · open toolsमराठीMarathiBlog unavailable in this language · open toolsગુજરાતીGujaratiBlog unavailable in this language · open tools简体中文Chinese SimplifiedBlog unavailable in this language · open tools繁體中文Chinese TraditionalBlog unavailable in this language · open tools日本語JapaneseBlog unavailable in this language · open tools한국어KoreanBlog unavailable in this language · open toolsTiếng ViệtVietnameseBlog unavailable in this language · open toolsไทยThaiBlog unavailable in this language · open toolsBahasa IndonesiaIndonesianBlog unavailable in this language · open toolsBahasa MelayuMalayBlog unavailable in this language · open toolsFilipinoFilipinoBlog unavailable in this language · open toolsKiswahiliSwahiliBlog unavailable in this language · open toolsAfrikaansAfrikaansBlog unavailable in this language · open toolsMagyarHungarianBlog unavailable in this language · open toolsБългарскиBulgarianBlog unavailable in this language · open toolsHrvatskiCroatianBlog unavailable in this language · open toolsSrpskiSerbianBlog unavailable in this language · open toolsSlovenčinaSlovakBlog unavailable in this language · open toolsSlovenščinaSlovenianBlog unavailable in this language · open toolsLietuviųLithuanianBlog unavailable in this language · open toolsLatviešuLatvianBlog unavailable in this language · open toolsEestiEstonianBlog unavailable in this language · open toolsCatalàCatalanBlog unavailable in this language · open toolsEuskaraBasqueBlog unavailable in this language · open tools

Code & data

Missing, null or empty: write a JSON field contract before importing

Use a four-record contact example to distinguish an omitted field, null, an empty string and a real value before a CSV export hides the difference.

Start with four records that look similar in a table

A contact export contains four fictional customer IDs. One object has no phone member, one has phone set to null, one has an empty string and one has a nonempty string. All four objects are valid JSON. The job is to preserve the intended action, not to make their columns look alike. Keep a read-only copy of the original payload and a small working sample.

An absent member is a fact about object structure. Null is an explicit JSON value. An empty string is a string containing no characters. The words unknown, clear and unchanged are application decisions; they do not follow automatically from those three representations.

[{"id":"C-101"},{"id":"C-102","phone":null},{"id":"C-103","phone":""},{"id":"C-104","phone":"5550104"}]

RFC 8259: JSON values and objects ↗

Write the decision beside the destination field

For a fictional address-book migration, the team could decide that omission leaves an existing phone unchanged, null clears it, an empty string is rejected for review, and a nonempty string replaces it. This is an example contract, not a rule to apply to an unknown API. A different destination may use null for unknown or reject it entirely.

Record the contract version, field type, allowed states and reviewer. Use the same sample for a new record and for an existing record if create and update operations have different behavior. Avoid running a live update merely to discover what null means; use documentation and an authorized test environment first.

  1. Find the destination documentation for this exact operation.
  2. Give each allowed state a meaning and a pass/fail expectation.
  3. Test the four synthetic records in an isolated test path.
  4. Compare the saved result with the expected state, not only a successful HTTP response.

Inspect the structure without assigning meaning

KitForma JSON Formatter can make the four-record payload easier to read. It does not enforce your field contract. Use Text Diff when reviewing a small edited copy, but inspect the changed values as well as the added and removed lines. Deleting a null member is a semantic edit even if the document becomes shorter.

When you need a review table, add a separate state column such as absent, null, empty or value in your migration script. Retain the raw JSON as the authoritative source. Do not invent a real phone number to satisfy a required field or replace all missing states with a single default.

Know what disappears during JSON-to-CSV conversion

The current KitForma JSON-to-CSV tool writes missing and null values as empty cells. An existing empty string also appears empty. A CSV-to-JSON round trip therefore cannot tell those three original states apart. This is a limitation of that conversion path, not evidence that the original records were identical.

For the sample, preserve id, phone_state and phone_value in an explicitly prepared review export. A reviewer can filter phone_state without guessing from blank cells. After approval, construct the destination payload from the recorded contract; do not treat the review CSV as a lossless archive.

id,phone_state,phone_value
C-101,absent,
C-102,null,
C-103,empty,
C-104,value,5550104

Q: Is an empty string the same as null?

No. The empty string has string type; null is a separate value. Your application may choose to treat them alike, but that rule must be explicit. Check type and presence separately when the difference affects updates or reporting.

Q: Can I recover the difference from an already flattened CSV?

Not reliably when all three states became the same empty cell. Use the original JSON, an audit log or a new export that includes state. Mark unresolved records for review instead of claiming that a guessed reconstruction is exact.

KITFORMA

Put it into practice

Reading guides is free and needs no account. Linked tools explain any account or Pro requirements.

Further reading

Sources last reviewed:

KitForma prepared this guide with AI assistance. Examples illustrate a workflow; they are not measurements of real sales, search volume or success. Check the linked sources and the result with your own file.

How to use this guide

Published and maintained by KitForma. The linked references explain the relevant formats and definitions. Examples use sample inputs; they do not establish a speed, quality or compatibility guarantee for your files. Check the tool’s stated limits and inspect your downloaded result.

Publisher and project details

Get new guides in your inbox

Join our optional email newsletter for KitForma tools, practical guides and product updates.

Give consent on the separate Brevo form, then confirm the link in your email. This is separate from account and support preferences. Unsubscribe using the link in every newsletter.

Open comments in an ad-free view

KitForma

What would you like to do?

Support center