Ця стаття є дзеркальною статтею машинного перекладу, будь ласка, натисніть тут, щоб перейти до оригінальної статті.

Вид: 8278|Відповідь: 1

[JavaScript] Front-end JS вирішує проблему втрати точності серіалізації JSON

[Копіювати посилання]
Опубліковано 13.02.2022 14:37:43 | | | |
Вимоги: Я створив онлайн-сторінку для розбору jwt, коли вміст jwt має довгий шрифт, використання стандартного методу JSON для парсингу призведе до втрати точності, як показано на рисунку нижче:

eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJuYW1lIjoiaXRzdnNlLmNvbSIsImlkIjo4OTA2MTM1NDg4MDEwNzc5Mjg1fQ.7tJHcSfbpZkgqw0ALGSRxyqkz2-UxZPhO_12TuKNZus



JavaScript має лише один тип числа: Число, число — це число з подвійною точністю з плаваючою комою, і на відміну від багатьох інших мов програмування, JavaScript не визначає різні типи чисел, такі як цілі числа, короткі, довгі, плаваючі з комою тощо. Тому в JavaScript числа не поділяються на типи цілих чисел і типи з плаваючою комою, і всі числа є типами з плаваючою комою.

При вираженні цілого числа число може представляти цілий діапазон [−2 до степеня 53, 2 до степеня 253]. Тому що Число має 8 байтів і 64 біти, включаючи 1 біт знаку, 11 експоненціальних бітів і 52 цифри мантиси.

Ви можете використовувати Number.MAX_SAFE_INTEGER і Number.MIN_SAFE_INTEGER для перегляду максимальних і мінімальних безпечних цілих чисел

Коли бекенд-інтерфейс повертає поле типу long, фронтенд використовує JSON.parse(text) для десеріалізації дисплея, що призводить до помилки відображення, і рішенням є те, що бекенд-інтерфейс конвертує поле типу long у string type і повертає його.

проєкт lossless-json, який аналізує JSON без ризику втрати числової інформації. Адреса GitHub:Вхід за гіперпосиланням видно.

ПередусімКлонуйте проєкт lossless-jsonщоб створити комплектну та мініфіковану бібліотеку (ES5, ПК має встановити node.js), і спочатку встановити залежності:

Потім компілюйте наступним чином:



./dist/lossless-json.js Це створить пакет сумісності з ES5, який можна запускати в браузері та node.js.

Тестування через консоль браузера наступним чином:



Модифікувати код проєкту,Ввести lossless-json.js файли, викликаючи LosslessJSON для серіалізації та десеріалізації JSON,Виправлено проблему втрати точності, як показано на рисунку нижче:

let json = LosslessJSON.parse('{"foo":"bar"}'); {foo: 'bar'}
нехай text = LosslessJSON.stringify(json);        '{"foo":"bar"}'



Тестова адреса:Вхід за гіперпосиланням видно.

Нарешті, додайте скомпільований lossless-json.js файл:
Туристи, якщо ви хочете побачити прихований контент цього допису, будь ласкаВідповідь

(Кінець)




Попередній:[Справжній бій]. NET/C# експортує кеш за допомогою нечіткого запиту StackExchange.Redis
Наступний:[Практика] Java не може ловити власні винятки за допомогою відображення hutool
Опубліковано 13.02.2022 16:28:40 |
Приходь знову вчитись...
Застереження:
Усе програмне забезпечення, програмні матеріали або статті, опубліковані Code Farmer Network, призначені лише для навчання та досліджень; Вищезазначений контент не повинен використовуватися в комерційних чи незаконних цілях, інакше користувачі несуть усі наслідки. Інформація на цьому сайті надходить з Інтернету, і спори щодо авторських прав не мають до цього сайту. Ви повинні повністю видалити вищезазначений контент зі свого комп'ютера протягом 24 годин після завантаження. Якщо вам подобається програма, будь ласка, підтримуйте справжнє програмне забезпечення, купуйте реєстрацію та отримайте кращі справжні послуги. Якщо є будь-яке порушення, будь ласка, зв'яжіться з нами електронною поштою.

Mail To:help@itsvse.com