Parse JSON to Java using Streaming Jackson Parser
Parse JSON to Java – Streaming Parser and Generator
Jackson 提供了一个将JSON解析为Java的底层API。该API为每个JSON对象提供token。举栗来说,JSON的开头符号‘{’将是解释器提供的第一个对象;键值对是另一种单一的对象。客户端代码可以使用token并且获得JSON属性或者构建一个Java对象,如果需要的话。这个dicengAPI十分强大,但是需要更多的代码。在大多数情况下,应该研究Jackson的树遍历和数据绑定能力。我们提供两个栗子。第一个栗子展示了JSON解析,第二个栗子展示了JSON生成;
解析JSON的示例
public static void main(String[] args) throws MalformedURLException, IOException {
// Get a list of albums from free music archive. limit the results to 5
String url = "http://freemusicarchive.org/api/get/albums.json?api_key=60BLHNQCAOUFPIBZ&limit=5";//译者注:同样的url无法访问
// get an instance of the json parser from the json factory
JsonFactory factory = new JsonFactory();
JsonParser parser = factory.createParser(new URL(url));
// continue parsing the token till the end of input is reached
while (!parser.isClosed()) {
// get the token
JsonToken token = parser.nextToken();
// if its the last token then we are done
if (token == null)
break;
// we want to look for a field that says dataset
if (JsonToken.FIELD_NAME.equals(token) && "dataset".equals(parser.getCurrentName())) {
// we are entering the datasets now. The first token should be
// start of array
token = parser.nextToken();
if (!JsonToken.START_ARRAY.equals(token)) {
// bail out
break;
}
// each element of the array is an album so the next token
// should be {
token = parser.nextToken();
if (!JsonToken.START_OBJECT.equals(token)) {
break;
}
// we are now looking for a field that says "album_title". We
// continue looking till we find all such fields. This is
// probably not a best way to parse this json, but this will
// suffice for this example.
while (true) {
token = parser.nextToken();
if (token == null)
break;
if (JsonToken.FIELD_NAME.equals(token) && "album_title".equals(parser.getCurrentName())) {
token = parser.nextToken();
System.out.println(parser.getText());
}
}
}
}
}
生成JSON的示例
public static void main(String[] args) throws IOException {
JsonFactory factory = new JsonFactory();
JsonGenerator generator = factory.createGenerator(new FileWriter(new File("albums.json")));
// start writing with {
generator.writeStartObject();
generator.writeFieldName("title");
generator.writeString("Free Music Archive - Albums");
generator.writeFieldName("dataset");
// start an array
generator.writeStartArray();
generator.writeStartObject();
generator.writeStringField("album_title", "A.B.A.Y.A.M");
generator.writeEndObject();
generator.writeEndArray();
generator.writeEndObject();
generator.close();
}
项目源码免费获取 个人博客,百度网盘地址+提取码,文件无密~