在Android開(kāi)發(fā)中,我們常常會(huì)使用到Json數(shù)據(jù)格式來(lái)傳遞和存儲(chǔ)數(shù)據(jù)。而Gson是Google提供的一個(gè)開(kāi)源的Java庫(kù),用于將Json字符串轉(zhuǎn)換為Java對(duì)象和將Java對(duì)象轉(zhuǎn)換為Json字符串。
使用Gson解析Json數(shù)據(jù)時(shí),有時(shí)會(huì)遇到一些異常情況。下面介紹幾種常見(jiàn)的Gson解析Json異常。
try { Gson gson = new Gson(); String jsonStr = "{\"name\":\"張三\",\"age\":18}"; Person person = gson.fromJson(jsonStr, Person.class); } catch (JsonSyntaxException e) { e.printStackTrace(); }
1. JsonSyntaxException:Json格式錯(cuò)誤異常
當(dāng)Json字符串中包含不合法字符或格式不正確時(shí),將會(huì)拋出JsonSyntaxException異常。
try { Gson gson = new Gson(); String jsonStr = "{\"name\":\"張三\",\"age\":\"18\"}"; Person person = gson.fromJson(jsonStr, Person.class); } catch (NumberFormatException e) { e.printStackTrace(); }
2. NumberFormatException:數(shù)字格式錯(cuò)誤異常
當(dāng)Json字符串中的數(shù)字格式不正確時(shí),將會(huì)拋出NumberFormatException異常。
try { Gson gson = new Gson(); String jsonStr = "{\"name\":\"張三\",\"age\":18}"; JsonElement jsonElement = gson.fromJson(jsonStr, JsonElement.class); JsonObject jsonObject = jsonElement.getAsJsonObject(); String phone = jsonObject.get("phone").getAsString(); } catch (NullPointerException e) { e.printStackTrace(); }
3. NullPointerException:空指針異常
當(dāng)Json字符串中不存在某個(gè)字段時(shí),直接調(diào)用該字段會(huì)拋出NullPointerException異常。
4. IllegalStateException:狀態(tài)異常
當(dāng)Json字符串中的數(shù)據(jù)類型與Java對(duì)象中的字段類型不一致時(shí),將會(huì)拋出IllegalStateException異常。
在使用Gson解析Json數(shù)據(jù)時(shí),需要注意Json字符串格式的正確性和Java對(duì)象的定義是否與Json字符串中的數(shù)據(jù)類型一致。