FastJson 성형 데이터의 반서열화 구덩이
1 String viewValue = "..............."; # json
2 JSONObject viewObject = JSONObject.parseObject(viewValue);
3 JSONObject videoObject = (JSONObject) viewObject.get("video");
4 Integer viewCount = new Integer(0);
5 if(videoObject.get("viewCount") != null) {
6 viewCount = (Integer) videoObject.get("viewCount"); #
7 }
이곳의 구덩이는 6행 코드에 나타난다. 내 목표는viewCount의 키에 대응하는 성형값을 얻는 것이다. 몇 번의 테스트를 거쳐도 아무런 이상이 발견되지 않았다.근데 테스트에 제출됐을 때 테스트 동창한테 이상이 생겼어요.그렇다면 구체적인 원인은 무엇일까?직설적으로fastjson은 성형된value값을 반서열화할 때 구체적인 길이에 따라 서로 다른 유형을 생성하고 값이 Integer형의 표현범위를 초과하면 반서열화Long으로 변한다.Integer 내에서 Integer로 반사됩니다.내가 테스트한 값은 모두 온라인에서 가능한 데이터 범위에 따라 테스트한 것이고 테스트 학생들은 가장자리 상황을 더 많이 덮어쓰기 때문에 롱을 반서열화했지만 롱은 인터내셔널로 강제로 전환할 수 없다.
그럼 어떻게 처리해야 하나요?Long으로 다시 이동하려면 문자열이 필요하며 코드는 다음과 같습니다.
if(videoObject.get("viewCount") != null) {
viewCount = Long.valueOf(String.valueOf(videoObject.get("viewCount")));
}
설명해야 할 것은, 나는 비교적 새로운 버전에 속한다.
com.alibaba
fastjson
1.2.47
참조:https://www.jianshu.com/p/108b57bac10e
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.