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();
    }

关注个人微信公众号:落花流水存心阁,不仅能免费获得相关项目的源码,还可以扩展思维,启迪智慧哦~
Jackson通过流Jackson解析器解将Json转换为Java
后台回复:json。获得项目源码~

如果觉得文章写的不错,也可以小小地打赏一下嘛~ 注意,多余0.5元的打赏部分将原路径返回心意到就ok,精神鼓励远胜于物质鼓励~
也期待合作,“码”上改变~

微信账号 支付宝账号
Jackson通过流Jackson解析器解将Json转换为Java Jackson通过流Jackson解析器解将Json转换为Java

相关文章: