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, alsjeblieft Antwoord (Einde) |