json 필드를 잘못 구문 분석했습니다. "mileage":0.0"
은 내 코드에서 int
입니다. 값이 0.0
이 될 때까지 성공적으로 구문 분석되었습니다. 그러나 json 필드의 값이 0.0
에서 다른 값으로 변경되자 마자 JsonFormatException이 시작되었습니다. 내 응용 프로그램에서 json을 구문 분석하려면 Gson을 사용하고 있습니다. 그래서 내 질문에 왜 값이 0.0
인데도 예외가 발생하지 않았습니까?Gson 파싱 float을
0
A
답변
2
정확하게 Gson이 작동하는 방식은 사용자가 비 직렬화를 수행하는 방법에 따라 다릅니다. @SerializedName
주석에 의해 자동으로 역 직렬화가 수행 될 가능성이 높습니다. 그럼 당신이이 같은 몇 가지 클래스가 있다고 가정하자 :
@SerializedName("val")
private int myValue;
, 그것은 당신이 원하는 당신을 제공하기 위해 "최선을"합니다. 여기에는 한 유형에서 다른 유형으로 일부 값 강제 변환이 포함됩니다. 위와 같이 설정된 클래스의 경우 Gson은 0
에 0.0
을 성공적으로 강제 적용 할뿐만 아니라 "1.0"
(문자열)을 1
으로 성공적으로 변환합니다.
강제 변환이 "불가능"인 경우에만 Exception
이 표시됩니다. 0.1
또는 "1.5"
을 얻 자마자 Gson은 그 값을 int
으로 표시 할 수 없으므로 예외를 throw합니다.
두 방향으로 모두 작동한다는 점에 유의하십시오. json에 정수 (예 : {"val":3}
)가 포함되어 있지만 클래스가 private String myValue
이라고 선언하면 Gson은이 숫자를 "3"
으로 강제 변경합니다.
아마도 0.0은 정확하게 정수로 표현할 수 있기 때문입니다. –
@GabeSechan 당신은 무엇을 의미합니까? – Harry
0.0 = 0은 정수입니다. 여기서 0.1은 정수가 아닙니다. –