
Egy importfájlban ugyanaz a mezőnév kétszer szerepel. A program elfogadja a fájlt, a képernyőn mégis csak az egyik érték látszik. Az ilyen adatvesztés különösen kellemetlen, mert a feldolgozás sikeres állapotot jelezhet. Az ismétlődő objektumkulcs ezért külön ellenőrzési kérdés minden JSON-adatkapcsolatban.
A probléma a mezőnév azonosságából ered. Az egymást követő rendelési tételek azonos termékneve ettől külön eset: az ismétlődő adatrekord és az ismétlődő mezőnév eltérő szerkezeti kérdés.
Mit mond a formátum szabványa?
Az RFC 8259 negyedik szakasza szerint az objektumon belüli neveknek egyedinek kellene lenniük a jó együttműködéshez. A dokumentum külön jelzi, hogy ismétlődő névnél a feldolgozók viselkedése eltér: van, amelyik az utolsó értéket tartja meg, más hibát jelez, és olyan is létezik, amelyik minden név–érték párt hozzáférhetővé tesz.
Emiatt az ismétlődő kulcsot nem érdemes általánosan minden feldolgozó által visszautasított szintaktikai hibának nevezni. A fontos gyakorlati állítás az, hogy kiszámíthatatlan adatkapcsolatot hoz létre, ha a két végpont eltérően kezeli.
Képzelj el egy objektumot, amelyben a mennyiseg mező először 2, majd ismét mennyiseg néven 5 értéket kap. A küldő két értéket írt le, egy utolsó értéket megtartó fogadóban viszont csak az 5 marad. A 2 + 5 = 7 összeg ebből már nem állítható elő az eredeti adatok ismerete nélkül.
Több tételhez több rekord tartozik
Ha két rendelési tételt akarsz továbbítani, a természetes szerkezet egy két elemből álló tömb. Minden elem saját objektum, például termékazonosítóval és mennyiséggel. A mennyiseg kulcs mindkét külön objektumban egyszer szerepelhet. Ez eltér attól, amikor ugyanazon objektumon belül kétszer írjuk le.
| Rekord | Termékazonosító | Mennyiség |
|---|---|---|
| Első tétel | P-101 | 2 |
| Második tétel | P-202 | 5 |
| Összesen | 2 külön rekord | 7 |
A helyes modellnél az import ellenőrző adatai: rekordszám 2, mennyiségösszeg 7. A kulcsok egyedisége objektumonként vizsgálandó. Két külön rendelés azonos datum nevű mezője szabályos, mert külön objektumokhoz tartoznak.
Száz rekord elfogadása sem bizonyít mindent
Második példánkban egy fájl száz rendelési sort tartalmaz, összesen 250 termékdarabbal. A rendszer száz sort olvas be, de tíz sorban ismétlődő mennyiségmező volt. Ezek mindegyikében az első érték 3, az utolsó 1. Ha az előállító az első értéket tekintette érvényesnek, a fogadó összesen 10 × (3 − 1) = 20 darabbal kevesebbet, 230-at rögzít.
A rekordszám egyezik, a mennyiségösszeg eltér. Ez megmutatja, miért kell több egymástól független ellenőrző szám. Az első érték megtartása sem általános javítás: a helyes értéket az adatgazdának vagy a dokumentált előállítási szabálynak kell megmondania.
Hasznos importellenőrzés a rekordszám, az egyedi azonosítók száma, a mennyiségösszeg és egy kiválasztott pénzösszeg összege. Ezek sem bizonyítanak teljes tartalmi azonosságot, mert két eltérés kiegyenlítheti egymást. Tételszintű összevetésre is szükség lehet.
Az ellenőrzést az adatvesztés előtt végezd
Ha a JSON-objektumból már hagyományos kulcs–érték tároló készült, a korábbi ismétlődés nyoma eltűnhet. A duplikált kulcs felismerését ezért a nyers dokumentum feldolgozásakor kell elvégezni. Az alkalmazott könyvtár lehetőségeit külön meg kell nézni; a szépített kimenet önmagában kevés.
A JSON-formázó a szerkezet áttekintéséhez, a JSON-összehasonlító két dokumentum összevetéséhez adhat általános segítséget. Ne feltételezd, hogy minden formázó külön jelzi az ismétlődő kulcsokat. Saját rendszeredhez készíts kifejezetten ilyen bemenetet tartalmazó próbát.
Az importjelentésben legyen elkülönítve az elfogadott, elutasított és figyelmeztetéssel kezelt rekord. Hibánál őrizd meg az eredeti fájl ellenőrzött másolatát és a hiba helyét, hogy a forrás javítható legyen. Az automatikus összegzés, az első vagy utolsó érték választása csak előre rögzített adatmodell részeként védhető.
Tudáspróba
1. Mi maradhat meg a kétszer szereplő, előbb 2, majd 5 értékű mezőből egy utolsó értéket megtartó feldolgozóban?
- A: Mindig 7.
- B: 5.
- C: Mindig mindkét érték.
2. Száz importált rekord azonos rekordszámot ad a forrással: mi következik ebből?
- A: Minden mezőérték biztosan azonos.
- B: Az összes mennyiség biztosan helyes.
- C: A rekordszám egyezik, további tartalmi ellenőrzés szükséges.
3. Hogyan ábrázolható két külön rendelési tétel egyértelműen?
- A: Két objektumból álló tömbbel, objektumonként egyedi kulcsokkal.
- B: Ugyanazon objektumban kétszer leírt azonos kulccsal.
- C: A második tétel elhagyásával.
Megoldások és következő lépés
1. B. Az adott feldolgozási szabály az utolsó, 5 értéket tartja meg; más feldolgozó eltérően viselkedhet.
2. C. A száz rekord mellett is elveszhet vagy módosulhat mezőérték, ahogy a 250 helyett 230 darabos példa mutatja.
3. A. A tömb külön rekordokat tartalmaz, így ugyanaz a mezőnév külön objektumokban használható.
0–1 pont: különítsd el a mezőnevet, a mezőértéket és a rekordot a táblázaton. 2 pont: ellenőrizd újra a tíz hibás sor húszdarabos eltérését. 3 pont: próbáld ki saját importod ismétlődő kulccsal, és dokumentáld a feldolgozó viselkedését még az üzleti adatok fogadása előtt.

