streaming
Gson提供流的方式来解析json字符串,当碰到装着不同类型对象的list时,可以应用这种方式来解析,抓取其中想要的内容
示例程序使用了顺序遍历方法,简单但是好用
public class ParseTokenTest {
public static void main(String[] args) throws MalformedURLException, IOException {
// TODO Auto-generated method stub
ParseTokenTest test = new ParseTokenTest();
String url = "http://freemusicarchive.org/api/get/albums.json?api_key=60BLHNQCAOUFPIBZ&limit=5";
String json = IOUtils.toString(new URL(url));
JsonReader reader = new JsonReader(new StringReader(json));
test.handleObject(reader);
}
public void handleObject(JsonReader reader) throws IOException {
reader.beginObject();
while (reader.hasNext()) {
JsonToken token = reader.peek();
if (token.equals(JsonToken.BEGIN_ARRAY)) {
handleArray(reader);
}
else if (token.equals(JsonToken.END_ARRAY)) {
reader.endObject();
return;
}
else {
handleNonArrayToken(reader, token);
}
}
}
public void handleArray(JsonReader reader) throws IOException {
reader.beginArray();
while (true) {
JsonToken token = reader.peek();
if (token.equals(JsonToken.END_ARRAY)) {
reader.endArray();
break;
} else if (token.equals(JsonToken.BEGIN_OBJECT)) {
handleObject(reader);
} else {
handleNonArrayToken(reader, token);
}
}
}
public void handleNonArrayToken(JsonReader reader, JsonToken token) throws IOException {
if (token.equals(JsonToken.NAME)) {
System.out.println(reader.nextName());
} else if (token.equals(JsonToken.STRING)) {
System.out.println(reader.nextString());
} else if (token.equals(JsonToken.NUMBER)) {
System.out.println(reader.nextDouble());
} else {
reader.skipValue();
}
}
}
参考资料: Java Gson - parsing json to java token by token