gson抛出MalformedJsonException
我正在使用gson将jsonstring转换为Java对象。 result2的值与result1的值完全相同。 (从debugging器复制;添加了反斜杠)
转换result1时将引发以下exception: com.google.gson.JsonSyntaxException:com.google.gson.stream.MalformedJsonException:第1行中的预期EOF列170
转换result2工作正常。
jsonstring根据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; }
我怀疑result1的末尾有一些字符,在debugging器中看不到closures}
字符。 result1
与result2
的长度是多less? 我会注意到result2
引用有169个字符。
如果在对象结束后还有一些不是空格的字符时,GSON会抛出这个特殊错误,并且它非常狭窄地定义了空格(正如JSON规范所做的那样) – 只有\t
, \n
, \r
和空格会被当作空格。 尤其要注意的是,尾随的NUL( \0
)字符不会被视为空白,并会导致此错误 。
如果你不能很容易地找出最后引起多余字符的原因并消除它们,另一个select是告诉GSON在宽松模式下进行parsing:
Gson gson = new Gson(); JsonReader reader = new JsonReader(new StringReader(result1)); reader.setLenient(true); Userinfo userinfo1 = gson.fromJson(reader, Userinfo.class);
从我最近的经验来看, JsonReader#setLenient
基本上使parsing器非常宽容,甚至允许格式不正确的JSON数据。
但是对于从您可信的RESTful API中检索的某些数据,这个错误可能是由于尾随的空格造成的。 在这种情况下,简单地trim
数据将避免错误:
String trimmed = result1.trim();
然后gson.fromJson(trimmed, T)
应该按预期工作。
在debugging器中,您不需要添加反斜线,input字段理解特殊字符。
在Java代码中,您需要转义特殊字符
- 如何parsingGSON的dynamicJSON字段?
- 用Gson把JSON数组parsing成java.util.List
- gson.toJson()抛出StackOverflowError
- GsonBuilder setDateFormat for“2011-10-26T20:29:59-07:00”
- 如何使用gson库将string转换为JsonObject
- 你可以避免Gson转换“<”和“>”为Unicode转义序列?
- 使用GSON获取嵌套的JSON对象
- 如何使用Gradle将Boon或Jackson JSONparsing器添加到Android Studio?
- 谷歌Gson – 反序列化列表<class>对象? (通用型)