Tento článok je zrkadlovým článkom o strojovom preklade, kliknite sem pre prechod na pôvodný článok.

Pohľad: 8278|Odpoveď: 1

[JavaScript] Front-end JS rieši problém straty presnosti serializácie JSON

[Kopírovať odkaz]
Zverejnené 13. 2. 2022 14:37:43 | | | |
Požiadavky: Vytvoril som online stránku na parsovanie jwt, keď má obsah jwt dlhý typ, použitie predvolenej metódy JSON na parsovanie spôsobí stratu presnosti, ako je znázornené na obrázku nižšie:

eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJuYW1lIjoiaXRzdnNlLmNvbSIsImlkIjo4OTA2MTM1NDg4MDEwNzc5Mjg1fQ.7tJHcSfbpZkgqw0ALGSRxyqkz2-UxZPhO_12TuKNZus



JavaScript má len jeden typ čísla: Number, Number je dvojnásobne presné číslo s pohyblivou desatinnou čiarkou a na rozdiel od mnohých iných programovacích jazykov JavaScript nedefinuje rôzne typy čísel, ako sú celé čísla, krátke, dlhé, pohyblivé desatinné čísla a podobne. Preto v JavaScripte nie sú čísla rozdelené na celočíselné typy a typy s pohyblivou desatinnou čiarkou a všetky čísla sú typy s pohyblivou desatinnou čiarkou.

Pri vyjadrení celého čísla môže Number predstavovať celočíselný rozsah [−2 na mocninu 53, 2 na mocninu 253]. Pretože Number má 8 bajtov a 64 bitov, vrátane 1 znamienkového bitu, 11 exponenciálnych bitov a 52 mantisových číslic.

Môžete použiť Number.MAX_SAFE_INTEGER a Number.MIN_SAFE_INTEGER na zobrazenie maximálnych a minimálnych bezpečnostných celých čísel

Keď backendové rozhranie vráti pole typu long, frontend použije JSON.parse(text) na deserializáciu zobrazenia, čo spôsobí chybu zobrazenia, a riešením je, že backendové rozhranie prevedie pole typu long na string type a vráti ho.

lossless-json projekt, parsovanie JSON bez rizika straty číselných informácií. GitHub adresa:Prihlásenie na hypertextový odkaz je viditeľné.

PredovšetkýmKlonujte projekt lossless-jsonna vytvorenie zbalenej a minifikovanej knižnice (ES5, PC musí nainštalovať node.js) a najskôr nainštalovať závislosti:

Potom skompilujte nasledovne:



./dist/lossless-json.js Toto vygeneruje balík kompatibilnosti s ES5, ktorý je možné spustiť v prehliadači a node.js.

Testované cez konzolu prehliadača nasledovne:



Upravte kód projektu,Predstavte lossless-json.js súbory, nazývajúc LosslessJSON pre serializáciu a deserializáciu JSON,Opravený problém so stratou presnosti, ako je znázornené na obrázku nižšie:

nech json = LosslessJSON.parse('{"foo":"bar"}'); {FOO: 'Bar'}
nech text = LosslessJSON.stringify(json);        '{"foo":"bar"}'



Testovacia adresa:Prihlásenie na hypertextový odkaz je viditeľné.

Nakoniec pripojte skompilovaný lossless-json.js súbor:
Turisti, ak chcete vidieť skrytý obsah tohto príspevku, prosím.Odpoveď

(Koniec)




Predchádzajúci:[Skutočný boj]. NET/C# exportuje cache pomocou StackExchange.Redis fuzzy query
Budúci:[Cvičenie] Java nedokáže zachytiť vlastné výnimky pomocou hutool reflection
Zverejnené 13. 2. 2022 16:28:40 |
Príď sa znova učiť...
Vyhlásenie:
Všetok softvér, programovacie materiály alebo články publikované spoločnosťou Code Farmer Network slúžia len na vzdelávacie a výskumné účely; Vyššie uvedený obsah nesmie byť použitý na komerčné alebo nezákonné účely, inak nesú všetky následky používateľmi. Informácie na tejto stránke pochádzajú z internetu a spory o autorské práva s touto stránkou nesúvisia. Musíte úplne vymazať vyššie uvedený obsah zo svojho počítača do 24 hodín od stiahnutia. Ak sa vám program páči, podporte originálny softvér, zakúpte si registráciu a získajte lepšie originálne služby. Ak dôjde k akémukoľvek porušeniu, kontaktujte nás prosím e-mailom.

Mail To:help@itsvse.com