我正在使用gson将json字符串转换为Java-Object.值RESULT2是完全一样的值RESULT1.(从调试器复制;添加了反斜杠)
转换result1时抛出以下异常: com.google.gson.JsonSyntaxException:com.google.gson.stream.MalformedJsonException:第1行第170列的预期EOF
转换result2工作正常.
根据jsonlint.com,json字符串有效.
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;
}
Run Code Online (Sandbox Code Playgroud)
Dan*_*tin 99
我怀疑result1在它的末尾有一些字符,你在调试器中看不到关闭}
字符.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);
Run Code Online (Sandbox Code Playgroud)
rye*_*nus 17
根据我最近的经验,JsonReader#setLenient
基本上使解析器非常宽容,甚至允许格式错误的JSON数据.
但是对于从您的受信任RESTful API检索的某些数据,此错误可能是由尾随空格引起的.在这种情况下,只需trim
数据就可以避免错误:
String trimmed = result1.trim();
Run Code Online (Sandbox Code Playgroud)
然后gson.fromJson(trimmed, T)
应该按预期工作.
归档时间: |
|
查看次数: |
161575 次 |
最近记录: |