我正在使用 gson 将 json 字符串转换为Java对象。值 RESULT2 是完全一样的值 RESULT1 。(从调试器复制;添加了反斜杠)
转换result1时会引发以下异常: com.google.gson.JsonSyntaxException:com.google.gson.stream.MalformedJsonException:预期的EOF在第1行的第170列
转换 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; }
我怀疑result1的末尾有一些字符,您在调试器中看不到结束}字符。result1vs 的长度是result2多少?我会注意到,result2正如您所引用的,它有169个字符。
}
result1
result2
GSON抛出特定的错误是没有空白的对象结束后,当有额外的字符,它定义空白 非常 狭窄(如JSON规格一样) -只是\t,\n,\r,和空间算作空白。 特别要注意的是,结尾的NUL(\0)字符不算作空格,并且会导致此错误。
\t
\n
\r
\0
如果您不容易弄清到底是什么导致了多余的字符并消除它们,另一种选择是告诉GSON以宽大的模式进行解析:
Gson gson = new Gson(); JsonReader reader = new JsonReader(new StringReader(result1)); reader.setLenient(true); Userinfo userinfo1 = gson.fromJson(reader, Userinfo.class);