이 글은 기계 번역의 미러 문서이며, 원본 기사로 바로 이동하려면 여기를 클릭해 주세요.

보기: 8278|회답: 1

[JavaScript] 프론트엔드 JS는 JSON 직렬화 정확도 손실 문제를 해결합니다

[링크 복사]
게시됨 2022. 2. 13. 오후 2:37:43 | | | |
요구사항: jwt 콘텐츠에 긴 타입을 가진 경우 기본 JSON 방식을 사용해 파싱하면 정확도가 떨어지는데, 아래 그림에서 볼 수 있습니다:

eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJuYW1lIjoiaXRzdnNlLmNvbSIsImlkIjo4OTA2MTM1NDg4MDEwNzc5Mjg1fQ.7tJHcSfbpZkgqw0ALGSRxyqkz2-UxZPhO_12TuKNZus



자바스크립트는 숫자 유형이 하나뿐입니다: 숫자, 숫자는 배정밀도 부동소수점 수이며, 많은 다른 프로그래밍 언어와 달리 정수, 짧음, 장기, 부동소수점 등 다양한 유형의 숫자를 정의하지 않습니다. 따라서 자바스크립트에서는 숫자가 정수 타입과 부동소수점 타입으로 나뉘지 않으며, 모든 숫자는 부동소수점 타입입니다.

정수를 표현할 때, 수는 [−2의 53의 거듭제곱, 2의 253의 거듭제곱]의 정수 범위를 나타낼 수 있습니다. 번호는 8바이트 64비트를 가지고 있으며, 여기에는 1개의 부호 비트, 11개의 지수 비트, 52개의 가수수 자리가 포함되어 있기 때문입니다.

Number.MAX_SAFE_INTEGER와 Number.MIN_SAFE_INTEGER를 사용해 최대 및 최소 안전 정수를 볼 수 있습니다

백엔드 인터페이스가 타입 롱 필드를 반환하면, 프론트엔드는 JSON.parse(text)를 사용해 디스플레이를 디직렬라이즈하여 디스플레이 오류를 발생시키고, 해결책은 백엔드 인터페이스가 타입 long인 필드를 문자열 타입으로 변환한 후 반환합니다.

lossless-json 프로젝트로, 숫자 정보 손실 위험 없이 JSON을 파싱합니다. GitHub 주소:하이퍼링크 로그인이 보입니다.

우선클론 the lossless-json 프로젝트번들로 묶이고 최소화된 라이브러리(ES5, PC가 node.js를 설치해야 함)를 구축하고, 먼저 의존성을 설치합니다:

그 다음 다음과 같이 컴파일하세요:



./dist/lossless-json.js 이 경우 브라우저와 node.js에서 실행할 수 있는 ES5 호환 패키지가 생성됩니다.

브라우저 콘솔을 통해 다음과 같이 테스트했습니다:



프로젝트 코드를 수정하고,lossless-json.js 파일 소개, JSON 직렬화 및 탈직렬화를 위해 LosslessJSON 호출,정확도 손실 문제를 해결했습니다, 아래 그림에서 볼 수 있습니다:

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



시험 주소:하이퍼링크 로그인이 보입니다.

마지막으로, 컴파일된 lossless-json.js 파일을 첨부하세요:
관광객 여러분, 이 게시물의 숨겨진 내용을 보고 싶으시다면 부탁드립니다회답

(끝)




이전의:[실제 전투]. NET/C#은 StackExchange를 사용하여 캐시를 내보냅니다. Redis 퍼지 쿼리
다음:[연습] 자바는 hutool 반사를 사용해 커스텀 예외를 포착할 수 없습니다
게시됨 2022. 2. 13. 오후 4:28:40 |
다시 배우러 와서...
면책 조항:
Code Farmer Network에서 발행하는 모든 소프트웨어, 프로그래밍 자료 또는 기사는 학습 및 연구 목적으로만 사용됩니다; 위 내용은 상업적 또는 불법적인 목적으로 사용되지 않으며, 그렇지 않으면 모든 책임이 사용자에게 부담됩니다. 이 사이트의 정보는 인터넷에서 가져온 것이며, 저작권 분쟁은 이 사이트와는 관련이 없습니다. 위 내용은 다운로드 후 24시간 이내에 컴퓨터에서 완전히 삭제해야 합니다. 프로그램이 마음에 드신다면, 진짜 소프트웨어를 지원하고, 등록을 구매하며, 더 나은 진짜 서비스를 받아주세요. 침해가 있을 경우 이메일로 연락해 주시기 바랍니다.

Mail To:help@itsvse.com