gson에서 MalformedJsonException 발생
gson 을 사용하여 json 문자열을 Java-Object 로 변환하고 있습니다. 의 값 result2는 정확히의 값과 동일한 결과 1 . (디버거에서 복사 됨, 백 슬래시 추가됨)
result1을 변환하는 동안 다음 예외가 발생 합니다. com.google.gson.JsonSyntaxException : com.google.gson.stream.MalformedJsonException : 1 행 170 열에 EOF가 필요합니다.
result2 변환이 잘 작동합니다.
json 문자열은 jsonlint.com에 따라 유효합니다.
public static Userinfo getUserinfo()
{
String result1 = http.POST("https://www.bitstamp.net/api/balance/",
postdata, true);
String result2 = "{\"btc_reserved\": \"0\", \"fee\": \"0.5000\", \"btc_available\": \"0.10000000\", \"usd_reserved\": \"0\", \"btc_balance\": \"0.10000000\", \"usd_balance\": \"30.00\", \"usd_available\": \"30.00\"}";
Gson gson = new Gson();
Userinfo userinfo1 = gson.fromJson(result1, Userinfo.class); //throws Exception
Userinfo userinfo2 = gson.fromJson(result2, Userinfo.class); //works fine
return userinfo1;
}
private class Userinfo {
public Userinfo(){
}
public float usd_balance;
public float btc_balance ;
public float usd_reserved;
public float btc_reserved;
public float usd_available;
public float btc_available;
public float fee;
public float last_update;
}
결과 1에는 닫는 }
문자 다음에 오는 디버거에서 볼 수없는 문자가 끝에있는 것으로 생각 됩니다. 의 길이 무엇 result1
비교는 result2
? 나는 result2
당신이 인용 한 것처럼 169 자라는 것을 주목할 것입니다 .
하지 공백있는 개체의 종료 후 추가 문자를있을 때 GSON는 특정 오류가 발생하고,이 공백 정의 매우 협소합니다 (JSON 사양이처럼) - 단지 \t
, \n
, \r
공백으로, 공간의 수를. 특히 후행 NUL ( \0
) 문자는 공백으로 간주되지 않으며이 오류가 발생 합니다.
끝에 추가 문자의 원인을 쉽게 파악하고 제거 할 수없는 경우 GSON에게 관대 모드로 구문 분석하도록 지시하는 방법이 있습니다.
Gson gson = new Gson();
JsonReader reader = new JsonReader(new StringReader(result1));
reader.setLenient(true);
Userinfo userinfo1 = gson.fromJson(reader, Userinfo.class);
내 최근 경험에서 JsonReader#setLenient
기본적으로 파서는 잘못된 형식의 JSON 데이터를 허용하는 경우에도 매우 관대합니다.
그러나 신뢰할 수있는 RESTful API에서 검색된 특정 데이터의 경우이 오류는 후행 공백으로 인해 발생할 수 있습니다. 이러한 경우 trim
데이터 만으로도 오류를 피할 수 있습니다.
String trimmed = result1.trim();
그런 다음 gson.fromJson(trimmed, T)
예상대로 작동합니다.
디버거에서는 백 슬래시를 추가 할 필요가 없으며 입력 필드는 특수 문자를 이해합니다.
자바 코드에서는 특수 문자를 이스케이프해야합니다.
참고 URL : https://stackoverflow.com/questions/11484353/gson-throws-malformedjsonexception
'programing' 카테고리의 다른 글
Scheme과 Common Lisp의 실제 차이점은 무엇입니까? (0) | 2020.11.11 |
---|---|
Objective C의 사유 재산 (0) | 2020.11.11 |
git status-> 하위 디렉토리에 추가 (스테이징) 될 파일 표시 (0) | 2020.11.11 |
자바 용 JWT (JSON 웹 토큰) 라이브러리 (0) | 2020.11.11 |
D3.js prepend (jQuery prepend와 유사) (0) | 2020.11.11 |