FIELD NOTES · ACCEPTANCE EXERCISES

Reject ambiguous duplicate keys before importing JSON

A CMS import can carry two different prices under the same property name and still look like valid JSON to a reviewer. If one component keeps the first value and another keeps the last, agreement is lost before the record reaches the website. Define a duplicate-member policy at the raw-input boundary.

Primary evidence and claim boundaries

RFC8259 says object member names should be unique and describes differing receiver behaviour when they are duplicated. It does not require every JSON parser to reject them. Primary reference · Read 18 October 2026.

Filled acceptance example

Original synthetic teaching scenario, not a client case, provider integration test or business result. The example policy needs the actual owner’s approval; scroll the table on narrow screens.

Input and stateDeclared checkExpected output and decision
{"sku":"A","price":70,"price":90}Two price members in one objectReject under this import policy; do not choose70 or 90
{"en":{"title":"A"},"zh":{"title":"甲"}}Same name in different nested objectsNot a duplicate in either object
{"sku":"A","\u0073ku":"B"}Decode member names before comparisonDuplicate sku in root object; reject
JSON already parsed to an ordinary objectOriginal duplicate was overwrittenCannot prove no duplicates from this object alone

Practical handover procedure

  1. Require the original UTF-8 payload or a validated intake receipt before destructive import. Keep raw-input checks separate from field-type and business-price validation.
  2. Supply same-object, nested-object and escaped-name cases to a duplicate-aware parser. Require location and object path in the rejection output.
  3. Then validate the accepted schema and reconcile expected IDs/counts in a non-production import. A duplicate-free record can still have a wrong price.

Interpret the outcome

Rejecting the first row preserves uncertainty instead of silently accepting a chosen price. The nested example prevents an overly broad “all keys must be globally unique” rule. A final object snapshot lacks the discarded bytes needed to assess the fourth row.

Acceptance decision

A raw duplicate must fail before state changes, while legitimate nested repeated names remain allowed. Require a duplicate-aware implementation and error-path evidence, not a regular-expression search.

Limits and unverified work

Synthetic import specification, not a production JSON parser or a price-authority audit. No catalogue, credentials, live data or schema is changed.

Download the filled bilingual acceptance record — Contains the inputs, steps, expectations and limits. This is a teaching record, not an executable production integration.