Krav: Jeg laget en nettbasert parsing-side for jwt, når jwt-innholdet har lang type, vil bruk av standard JSON-metoden for å parse føre til tap av nøyaktighet, som vist i figuren nedenfor:
eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJuYW1lIjoiaXRzdnNlLmNvbSIsImlkIjo4OTA2MTM1NDg4MDEwNzc5Mjg1fQ.7tJHcSfbpZkgqw0ALGSRxyqkz2-UxZPhO_12TuKNZus
JavaScript har bare én talltype: Number, Number er et flyttall-tall med dobbel presisjon, og i motsetning til mange andre programmeringsspråk definerer ikke JavaScript ulike typer tall, som heltall, kort, lang, flyttall, osv. Derfor deles ikke tall i JavaScript inn i heltallstyper og flyttallstyper, og alle tall er flyttallstyper.
Når man uttrykker et heltall, kan Tall representere et heltallsområde på [−2 til potensen av 53, 2 til potensen av 253]. Fordi Number har 8 byte og 64 biter, inkludert 1 tegnbit, 11 eksponentielle biter og 52 mantissa-sifre.
Du kan bruke Number.MAX_SAFE_INTEGER og Number.MIN_SAFE_INTEGER for å se maksimale og minimale sikkerhetsheltall。
Når backend-grensesnittet returnerer et felt av type long, bruker frontend JSON.parse(text) for å deserialisere visningen, noe som vil forårsake en visningsfeil, og løsningen er at backend-grensesnittet konverterer feltet av type long til streng-type og returnerer det.
lossless-JSON-prosjektet, som parser JSON uten risiko for å miste numerisk informasjon. GitHub-adresse:Innloggingen med hyperkoblingen er synlig.
Først og fremstKlon lossless-json-prosjektetfor å bygge et samlet og minifisert bibliotek (ES5, PC må installere node.js), og først installere avhengighetene:
Deretter kompilerer du som følger:
./dist/lossless-json.js Dette vil generere en ES5-kompatibilitetspakke som kan kjøres i nettleseren og node.js.
Testet via nettleserkonsollen som følger:
Endre prosjektkoden,Introdusere lossless-json.js filer, kaller LosslessJSON for JSON-serialisering og deserialisering,Fikset problemet med tap av nøyaktighet, som vist i figuren nedenfor:
let json = LosslessJSON.parse('{"foo":"bar"}'); {foo: 'bar'} let text = LosslessJSON.stringify(json); '{"foo":"bar"}'
Testadresse:Innloggingen med hyperkoblingen er synlig.
Til slutt, legg ved den kompilerte lossless-json.js-filen:
Turister, hvis dere vil se det skjulte innholdet i dette innlegget, vær så snill Svare (Slutt) |