这是我的示例代码,希望对您有所帮助
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);



