gson이 Integer를 기본적으로 Double로 변환하는 문제를 완벽하게 해결

우선 javascript는 다음과 같은 유형만 있습니다.
1. JavaScript의 Number 이중 정밀도 부동 소수점 형식
2. String 큰따옴표의 백슬래시 의미의 유니코드
3. Boolean true 또는 false
4, Array 값의 순차적 시퀀스
5. Value는 문자열, 숫자, 진짜인지 가짜인지 (true/false), 빈 (null) 등
6. Object 무질서 집합 키 값 쌍
7. Whitespace는 모든 쌍의 영패를 사용할 수 있다
8、null empty
그래서 결론을 얻을 수 있다. 사실은javascript에서 20과 20.0은 똑같다. 모두number 유형이다. 즉javascript에 정수 유형설이 없다.
그래서 우리는 gson을 사용한다.fromJson(msg, new TypeToken>() {}.getType()에서 json 문자열 msg
예:
{"id": 20, "name": "test"} 맵로 변환하면 숫자 형식의 값을 모두 Double 형식으로 변환합니다. (이때 맵에서 키가'id'인 값은 Double 형식입니다. 20.0입니다.)
우리가 다시 이 맵을 gson으로 쓰면.Json이 json 문자열로 바뀌었을 때 이상한 일이 발생했습니다. 우리가 처음에 전해 온 json 문자열과 일치하지 않고 {"id": 20.0,name":"test"}가 되었습니다.
그것들을 일치시키려면 이렇게 해서 gson 대상을 만들 수 있습니다.

<span style="font-family:arial,  , sans-serif, tahoma, Microsoft YaHei;color:#454545;">   Gson gson = new GsonBuilder().
        registerTypeAdapter(Double.class, new JsonSerializer<Double>() {

          @Override
          public JsonElement serialize(Double src, Type typeOfSrc, JsonSerializationContext context) {
            if (src == src.longValue())
              return new JsonPrimitive(src.longValue());
            return new JsonPrimitive(src);
          }
        }).create();</span>

즉, Double 유형이라면 그것과longValue가 같은지 아닌지를 판단하고, 만약 같다면 소수위가'.0'을 보충한 것을 설명한다. 그러면 우리는 src로 돌아간다.longValue, 그렇지 않으면 Double src로 돌아갑니다.
이상에서 gson이 Integer를 기본적으로 더블로 바꾸는 문제를 완벽하게 해결한 것은 바로 편집자가 여러분에게 공유한 모든 내용입니다. 참고 부탁드리고 저희도 많이 사랑해 주세요.

좋은 웹페이지 즐겨찾기