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 state | Declared check | Expected output and decision |
|---|---|---|
| {"sku":"A","price":70,"price":90} | Two price members in one object | Reject under this import policy; do not choose70 or 90 |
| {"en":{"title":"A"},"zh":{"title":"甲"}} | Same name in different nested objects | Not a duplicate in either object |
| {"sku":"A","\u0073ku":"B"} | Decode member names before comparison | Duplicate sku in root object; reject |
| JSON already parsed to an ordinary object | Original duplicate was overwritten | Cannot prove no duplicates from this object alone |
Practical handover procedure
- 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.
- Supply same-object, nested-object and escaped-name cases to a duplicate-aware parser. Require location and object path in the rejection output.
- 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.