栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

如何使用Gson处理具有相同属性名称的不同数据类型?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

如何使用Gson处理具有相同属性名称的不同数据类型?

这是我的示例代码,希望对您有所帮助

public <T> List<T> readData(InputStream inputStream, Class<T> clazz) throws Exception {         ArrayList<Object> arrayList = new ArrayList<>();  GsonBuilder gsonBuilder = new GsonBuilder(); Gson gson = gsonBuilder.create(); JsonReader jsonReader = new JsonReader(new InputStreamReader(inputStream, "UTF_8")); jsonReader.setLenient(true); JsonToken jsonToken = jsonReader.peek(); switch (jsonToken) {     case BEGIN_ARRAY:         jsonReader.beginArray();         while (jsonReader.hasNext()) {  arrayList.add(gson.fromJson(jsonReader, clazz));         }         jsonReader.endArray();         break;     case BEGIN_OBJECT:         T data = clazz.cast(gson.fromJson(jsonReader, clazz));         arrayList.add(data);         break;     case NUMBER:         Integer number = Integer.parseInt(jsonReader.nextString());         arrayList.add(number);         break;     default:         jsonReader.close();         inputStream.close();         return Collections.emptyList(); } jsonReader.close(); inputStream.close(); return (List<T>) arrayList; }

另一个

parseRecursive
位于
Streams.java
(您可以通过Google搜索),如下所示:

private static JsonElement parseRecursive(JsonReader reader) throws IOException {        switch (reader.peek()) {        case STRING: return new JsonPrimitive(reader.nextString());        case NUMBER: String number = reader.nextString(); return new JsonPrimitive(JsonPrimitive.stringTonumber(number));        case BOOLEAN: return new JsonPrimitive(reader.nextBoolean());        case NULL: reader.nextNull(); return JsonNull.createJsonNull();        case BEGIN_ARRAY: JsonArray array = new JsonArray(); reader.beginArray(); while (reader.hasNext()) {     array.add(parseRecursive(reader)); } reader.endArray(); return array;        case BEGIN_OBJECT: JsonObject object = new JsonObject(); reader.beginObject(); while (reader.hasNext()) {     object.add(reader.nextName(), parseRecursive(reader)); } reader.endObject(); return object;        case END_document:        case NAME:        case END_OBJECT:        case END_ARRAY:        default: throw new IllegalArgumentException();        }    }

更新:您也可以

parse(JsonReader reader)
Streams
类(gson-2.3.1.jar)中引用

像这样

JsonElement jsonElement = Streams.parse(jsonReader);


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/483594.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号