2017-09-16 3 views
0

json 필드를 잘못 구문 분석했습니다. "mileage":0.0"은 내 코드에서 int입니다. 값이 0.0이 될 때까지 성공적으로 구문 분석되었습니다. 그러나 json 필드의 값이 0.0에서 다른 값으로 변경되자 마자 JsonFormatException이 시작되었습니다. 내 응용 프로그램에서 json을 구문 분석하려면 Gson을 사용하고 있습니다. 그래서 내 질문에 왜 값이 0.0인데도 예외가 발생하지 않았습니까?Gson 파싱 float을

+1

아마도 0.0은 정확하게 정수로 표현할 수 있기 때문입니다. –

+0

@GabeSechan 당신은 무엇을 의미합니까? – Harry

+1

0.0 = 0은 정수입니다. 여기서 0.1은 정수가 아닙니다. –

답변

2

정확하게 Gson이 작동하는 방식은 사용자가 비 직렬화를 수행하는 방법에 따라 다릅니다. @SerializedName 주석에 의해 자동으로 역 직렬화가 수행 될 가능성이 높습니다. 그럼 당신이이 같은 몇 가지 클래스가 있다고 가정하자 :

GSON가 개체의 인스턴스로 텍스트를 역 직렬화
@SerializedName("val") 
private int myValue; 

, 그것은 당신이 원하는 당신을 제공하기 위해 "최선을"합니다. 여기에는 한 유형에서 다른 유형으로 일부 값 강제 변환이 포함됩니다. 위와 같이 설정된 클래스의 경우 Gson은 00.0을 성공적으로 강제 적용 할뿐만 아니라 "1.0" (문자열)을 1으로 성공적으로 변환합니다.

강제 변환이 "불가능"인 경우에만 Exception이 표시됩니다. 0.1 또는 "1.5"을 얻 자마자 Gson은 그 값을 int으로 표시 할 수 없으므로 예외를 throw합니다.

두 방향으로 모두 작동한다는 점에 유의하십시오. json에 정수 (예 : {"val":3})가 포함되어 있지만 클래스가 private String myValue이라고 선언하면 Gson은이 숫자를 "3"으로 강제 변경합니다.