JSON解析遇BEGIN_OBJECT错误,求助Gson提取特定信息的解决方法
解决Gson解析时的BEGIN_OBJECT错误
嘿,我之前也踩过这个坑!这个BEGIN_OBJECT错误说白了就是你试图把不是JSON对象的元素强行转成JsonObject了,常见的场景主要有两种,我给你拆解下:
最常见的诱因:JSON根节点是数组,你却硬转成对象
比如你的接口返回的JSON是这种数组格式:
[{"name":"Alice","age":25},{"name":"Bob","age":30}]
但你的代码里直接调用了parser.parse(jsonString).getAsJsonObject(),这时候Gson肯定要报错——因为它解析出来的根元素是JsonArray,根本不是JsonObject。
快速修复方案
先判断解析后的元素类型,再做对应处理,不管是对象还是数组都能搞定:
public static String toPrettyFormat(String jsonString) { // 先拿到最顶层的Json元素(新版Gson推荐用parseString代替旧的parser实例) JsonElement rootElement = JsonParser.parseString(jsonString); Gson gson = new GsonBuilder().setPrettyPrinting().create(); // 根据类型分支处理,同时可以加入你提取特定信息的逻辑 if (rootElement.isJsonObject()) { JsonObject jsonObj = rootElement.getAsJsonObject(); // 比如提取某个字段:String username = jsonObj.get("name").getAsString(); return gson.toJson(jsonObj); } else if (rootElement.isJsonArray()) { JsonArray jsonArr = rootElement.getAsJsonArray(); // 遍历数组提取信息:for (JsonElement elem : jsonArr) { JsonObject item = elem.getAsJsonObject(); } return gson.toJson(jsonArr); } else { // 处理字符串、数字这类基本类型的情况 return gson.toJson(rootElement); } }
另一个可能的原因:你要提取的字段不是对象
比如你想取data字段,但它实际是个字符串或数组,你却写了jsonObj.get("data").getAsJsonObject(),这也会触发同样的错误。这时候记得先判断字段类型:if (jsonObj.get("data").isJsonObject()),确认后再转换。
内容的提问来源于stack exchange,提问作者BTCDude
相关产品推荐
相关产品推荐

