Dit artikel is een spiegelartikel van machinevertaling, klik hier om naar het oorspronkelijke artikel te gaan.

Bekijken: 8278|Antwoord: 1

[JavaScript] Front-end JS lost het probleem van verlies van JSON-serialisatienauwkeurigheid op

[Link kopiëren]
Geplaatst op 13-02-2022 14:37:43 | | | |
Vereisten: Ik heb een online parsingpagina voor jwt gemaakt; wanneer de jwt-inhoud een lange lettertype heeft, zal het gebruik van de standaard JSON-methode voor parsen een verlies van nauwkeurigheid veroorzaken, zoals te zien is in de onderstaande figuur:

eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJuYW1lIjoiaXRzdnNlLmNvbSIsImlkIjo4OTA2MTM1NDg4MDEwNzc5Mjg1fQ.7tJHcSfbpZkgqw0ALGSRxyqkz2-UxZPhO_12TuKNZus



JavaScript heeft slechts één type getal: Number, Number is een dubbelprecisie floating-point getal, en in tegenstelling tot veel andere programmeertalen definieert JavaScript geen verschillende typen getallen, zoals gehele getallen, kort, lang, floating-point, enzovoort. Daarom worden getallen in JavaScript niet onderverdeeld in gehele getallentypen en drijvendekommagetypen, en zijn alle getallen floating-point-typen.

Bij het uitdrukken van een geheel getal kan Number een geheel bereik van [−2 tot de macht van 53, 2 tot de macht van 253] vertegenwoordigen. Omdat Number 8 bytes en 64 bits heeft, inclusief 1 tekenbit, 11 exponentiële bits en 52 mantissa-cijfers.

Je kunt Number.MAX_SAFE_INTEGER en Number.MIN_SAFE_INTEGER gebruiken om de maximale en minimale veiligheidsgehele getallen te bekijken

Wanneer de backend-interface een veld van type long teruggeeft, gebruikt de frontend JSON.parse(text) om het display te deserialiseren, wat een weergavefout veroorzaakt, en de oplossing is dat de backend-interface het veld van type long omzet naar string-type en het teruggeeft.

lossless-JSON-project, waarbij JSON wordt ontleed zonder het risico numerieke informatie te verliezen. GitHub-adres:De hyperlink-login is zichtbaar.

AllereerstKloon het lossless-json-projectom een gebundelde en geminificeerde bibliotheek te bouwen (ES5, pc moet node.js installeren), en eerst de afhankelijkheden installeren:

Vervolgens compileren als volgt:



./dist/lossless-json.js Dit genereert een ES5-compatibiliteitspakket dat in de browser en node.js kan worden uitgevoerd.

Getest via de browserconsole als volgt:



Wijzig de projectcode,Introduceer lossless-json.js bestanden, waarbij LosslessJSON wordt aangesproken voor JSON-serialisatie en deserialisatie,Het probleem met het verlies van nauwkeurigheid opgelost, zoals getoond in de onderstaande figuur:

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



Testadres:De hyperlink-login is zichtbaar.

Voeg tenslotte het gecompileerde lossless-json.js bestand bij:
Toeristen, als jullie de verborgen inhoud van dit bericht willen zien, alsjeblieftAntwoord

(Einde)




Vorig:[Echte gevechten]. NET/C# exporteert de cache met behulp van StackExchange.Redis fuzzy query
Volgend:[Oefening] Java kan geen aangepaste uitzonderingen vangen met hutool reflection
Geplaatst op 13-02-2022 16:28:40 |
Kom om weer te leren...
Disclaimer:
Alle software, programmeermaterialen of artikelen die door Code Farmer Network worden gepubliceerd, zijn uitsluitend bedoeld voor leer- en onderzoeksdoeleinden; De bovenstaande inhoud mag niet worden gebruikt voor commerciële of illegale doeleinden, anders dragen gebruikers alle gevolgen. De informatie op deze site komt van het internet, en auteursrechtconflicten hebben niets met deze site te maken. Je moet bovenstaande inhoud volledig van je computer verwijderen binnen 24 uur na het downloaden. Als je het programma leuk vindt, steun dan de echte software, koop registratie en krijg betere echte diensten. Als er sprake is van een inbreuk, neem dan contact met ons op via e-mail.

Mail To:help@itsvse.com