Skip to content

Instantly share code, notes, and snippets.

@jjylik
Created September 8, 2020 05:33
Show Gist options
  • Save jjylik/0dc04e3feb6eeb1242b4e2c7795f4412 to your computer and use it in GitHub Desktop.
Save jjylik/0dc04e3feb6eeb1242b4e2c7795f4412 to your computer and use it in GitHub Desktop.
Android JsonReader stream to Map<String, Object>
private Map<String, Object> readObject(JsonReader reader) throws IOException {
Map<String, Object> map = new HashMap<>();
reader.beginObject();
while (reader.hasNext()) {
String name = reader.nextName();
JsonToken token = reader.peek();
if (token == JsonToken.STRING) {
map.put(name, reader.nextString());
} else if (token == JsonToken.NUMBER) {
map.put(name, reader.nextLong());
} else if (token == JsonToken.NULL) {
map.put(name, null);
} else if (token == JsonToken.BOOLEAN) {
map.put(name, reader.nextBoolean());
} else if (token == JsonToken.BEGIN_OBJECT) {
map.put(name, readObject(reader));
} else if (token == JsonToken.BEGIN_ARRAY) {
map.put(name, readArray(reader));
} else {
reader.skipValue();
}
}
reader.endObject();
return map;
}
private List<Object> readArray(JsonReader reader) throws IOException {
List<Object> list = new ArrayList<>();
reader.beginArray();
while (reader.hasNext()) {
JsonToken token = reader.peek();
if (token == JsonToken.BEGIN_OBJECT) {
list.add(readObject(reader));
} else if (token == JsonToken.BEGIN_ARRAY) {
list.add(readArray(reader));
} else {
reader.skipValue();
}
}
reader.endArray();
return list;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment