Jackson provides a low level API to parse json string. The API provides token for each json object. For example, the start of json ‘{’ is the first object that the parser provides. The key value pair is another single object. The client code can use the tokens and get the json properties or build a java object out of it if required. This low level API is extremely powerful but needs a lot of coding. For most cases, Jackson’s tree traversing and data binding capability should be explored instead. We provide two examples below. The first example demonstrates json parsing and the second demonstrated json generation.
package com.studytrails.json.jackson;
import java.io.IOException;
import java.net.MalformedURLException;
import java.net.URL;
import com.fasterxml.jackson.core.JsonFactory;
import com.fasterxml.jackson.core.JsonParser;
import com.fasterxml.jackson.core.JsonToken;
/**
* The aim of this class is to get the list of albums from free music archive
* (limit to 5)
*
*/
public class StreamParser1 {
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";
// 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());
}
}
}
}
}
}
package com.studytrails.json.jackson;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import com.fasterxml.jackson.core.JsonFactory;
import com.fasterxml.jackson.core.JsonGenerator;
/**
*
* In This example we look at generating a json using the jsongenerator. we will
* be creating a json similar to
* http://freemusicarchive.org/api/get/albums.json?
* api_key=60BLHNQCAOUFPIBZ&limit=1, but use only a couple of fields
*
*/
public class StreamGenerator1 {
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();
}
}
(Note: This article’s original links is here )