인터페이스에 대한 역마샬링 후 JSON 번호가 잘림

PHPz
풀어 주다: 2024-02-10 09:48:08
앞으로
553명이 탐색했습니다.

JSON 数字在解组到接口后被截断

개발 과정에서 데이터 전송을 위해 JSON 형식을 사용하는 경우가 많습니다. 그러나 때때로 JSON 데이터를 인터페이스로 역마샬링한 후 숫자 데이터가 잘리는 경우가 있습니다. 이것은 매우 흔한 질문이지만, 쉽게 간과되는 질문입니다. 이 기사에서는 PHP 편집자 Zimo가 이 문제의 원인과 이를 방지하고 해결하여 디지털 데이터의 무결성과 정확성을 보장하는 방법을 자세히 소개합니다.

질문 내용

그래서 저는 많은 필드가 포함된 json을 가지고 있고 제안된 대로 이를 반복하고 있습니다. JSON 키를 효율적으로 변경하는 방법 필요하지 않은 일부 키를 제거합니다. 하지만 삭제 후 기존 json의 원래 값이 변경되고 일부는 float인 것처럼 보이므로 이를 보여주기 위해 데모를 만들었습니다.

이 동작을 어떻게 바꾸나요? 응interface{} 导致了该问题吗?为什么1684366653200744506被截断为1684366653200744400?

감사합니다!

https://go.dev/play/p/x2auwqwb2fl

참고로 출력 json은 1684366653200744400으로 변경됩니다

2009/11/10 23:00:00 1684366653200744448.000000
2009/11/10 23:00:00 map[timestamp:1.6843666532007444e+18]
2009/11/10 23:00:00 json Marshal from maps of key string and value interface to batch json for insert to DB
2009/11/10 23:00:00 {"timestamp":1684366653200744400}
로그인 후 복사

해결 방법

이는 기본적으로 encoding/json 包将 float64가 json 번호의 인터페이스 값에 저장되기 때문입니다. json.unmarshal을 참조하세요.

json을 인터페이스 값으로 역마샬링하려면 unmarshal은 인터페이스 값에 다음 중 하나를 저장합니다.

  • bool, json 부울 값
  • json 번호용 float64
  • ...

디코더를 만들고 (*decoder).usenumber를 호출하여 동작을 변경할 수 있습니다.

으아악

See//m.sbmmt.com/link/3a6c2c9231df58107434b942fa600b22.

위 내용은 인터페이스에 대한 역마샬링 후 JSON 번호가 잘림의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:stackoverflow.com
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿
회사 소개 부인 성명 Sitemap
PHP 중국어 웹사이트:공공복지 온라인 PHP 교육,PHP 학습자의 빠른 성장을 도와주세요!