开发手册 欢迎您!
软件开发者资料库

Jackson - 流媒体API

Jackson 初学者教程 - 从概述,环境设置,第一个应用程序,ObjectMapper,对象序列化,数据绑定,树模型,流API API开始,简单易学地学习杰克逊库

Streaming API将JSON内容作为离散事件进行读写. JsonParser读取数据,而JsonGenerator写入数据.它是三者中最强大的方法,具有最低的开销和最快的读/写操作.它是Analogus to Stax解析器的XML.

在本文中,我们将展示使用Jackson流API来读写JSON数据. Streaming API与令牌的概念一起使用,Json的每个细节都要谨慎处理.以下是我们将在示例中使用的两个类:

  • JsonGenerator    - 写入JSON字符串.

  •  JsonParser    - 解析JSON字符串.

使用JsonGenerator编写JSON

使用JsonGenerator非常简单.首先使用JsonFactory.createJsonGenerator()方法创建JsonGenerator并使用它的write ***()方法来编写每个json值.

JsonFactory jsonFactory = new JsonFactory();JsonGenerator jsonGenerator = jsonFactory.createGenerator(new File(   "student.json"), JsonEncoding.UTF8);// {jsonGenerator.writeStartObject();// "name" : "Mahesh Kumar"jsonGenerator.writeStringField("name", "Mahesh Kumar");


让我们看看JsonGenerator的运作情况.在 C:\> Jackson_WORKSPACE 中创建名为JacksonTester的java类文件.

文件:JacksonTester.java

import java.io.File;import java.io.IOException;import java.util.Map;import com.fasterxml.jackson.core.JsonEncoding;import com.fasterxml.jackson.core.JsonFactory;import com.fasterxml.jackson.core.JsonGenerator;import com.fasterxml.jackson.core.JsonParseException;import com.fasterxml.jackson.databind.JsonMappingException;import com.fasterxml.jackson.databind.ObjectMapper;public class JacksonTester {   public static void main(String args[]){      try {                  JsonFactory jsonFactory = new JsonFactory();         JsonGenerator jsonGenerator = jsonFactory.createGenerator(new File("student.json"), JsonEncoding.UTF8);         jsonGenerator.writeStartObject();         // "name" : "Mahesh Kumar"         jsonGenerator.writeStringField("name", "Mahesh Kumar");          // "age" : 21         jsonGenerator.writeNumberField("age", 21);         // "verified" : false         jsonGenerator.writeBooleanField("verified", false);         // "marks" : [100, 90, 85]         jsonGenerator.writeFieldName("marks");          // [         jsonGenerator.writeStartArray();          // 100, 90, 85         jsonGenerator.writeNumber(100);          jsonGenerator.writeNumber(90);          jsonGenerator.writeNumber(85);          // ]         jsonGenerator.writeEndArray();          jsonGenerator.writeEndObject();          jsonGenerator.close();                 //result student.json         //{          //   "name":"Mahesh Kumar",         //   "age":21,         //   "verified":false,         //   "marks":[100,90,85]         //}         ObjectMapper mapper = new ObjectMapper();         Map dataMap = mapper.readValue(new File("student.json"), Map.class);         System.out.println(dataMap.get("name"));         System.out.println(dataMap.get("age"));         System.out.println(dataMap.get("verified"));         System.out.println(dataMap.get("marks"));      }       catch (JsonParseException e) { e.printStackTrace(); }       catch (JsonMappingException e) { e.printStackTrace(); }       catch (IOException e) { e.printStackTrace(); }   } }


验证结果

使用 javac 编译器编译类,如下所示:

C:\ _Jackson_WORKSPACE> javac JacksonTester.java


现在运行jacksonTester查看结果:

C:\ Jackson_WORKSPACE> java JacksonTester


验证输出

Mahesh Kumar 21 false [100,90,85]


使用JsonParser读取JSON

使用JsonParser再次非常简单.首先使用JsonFactory.createJsonParser()方法创建JsonParser,并使用它的nextToken()方法将每个json字符串作为标记读取.检查每个令牌并相应处理

JsonFactory jasonFactory = new JsonFactory();JsonParser jsonParser = jasonFactory.createJsonParser(new File("student.json"));while (jsonParser.nextToken() != JsonToken.END_OBJECT) {   //get the current token   String fieldname = jsonParser.getCurrentName();   if ("name".equals(fieldname)) {      //move to next token      jsonParser.nextToken();      System.out.println(jsonParser.getText());            } }


让我们看看JsonParser的运作情况.在 C:\> Jackson_WORKSPACE 中创建名为JacksonTester的java类文件.

文件:JacksonTester.java

import java.io.File;import java.io.IOException;import java.util.Map;import com.fasterxml.jackson.core.JsonEncoding;import com.fasterxml.jackson.core.JsonFactory;import com.fasterxml.jackson.core.JsonGenerator;import com.fasterxml.jackson.core.JsonParseException;import com.fasterxml.jackson.databind.JsonMappingException;import com.fasterxml.jackson.databind.ObjectMapper;public class JacksonTester {   public static void main(String args[]){      JacksonTester tester = new JacksonTester();      try {                 JsonFactory jsonFactory = new JsonFactory();         JsonGenerator jsonGenerator = jsonFactory.createGenerator(new File(            "student.json"), JsonEncoding.UTF8);         jsonGenerator.writeStartObject();         jsonGenerator.writeStringField("name", "Mahesh Kumar");          jsonGenerator.writeNumberField("age", 21);         jsonGenerator.writeBooleanField("verified", false);          jsonGenerator.writeFieldName("marks");          jsonGenerator.writeStartArray(); // [         jsonGenerator.writeNumber(100);          jsonGenerator.writeNumber(90);          jsonGenerator.writeNumber(85);          jsonGenerator.writeEndArray();          jsonGenerator.writeEndObject();          jsonGenerator.close();                 //result student.json         //{          //   "name":"Mahesh Kumar",         //   "age":21,         //   "verified":false,         //   "marks":[100,90,85]         //}         JsonParser jsonParser = jsonFactory.createParser(new File("student.json"));         while (jsonParser.nextToken() != JsonToken.END_OBJECT) {            //get the current token            String fieldname = jsonParser.getCurrentName();            if ("name".equals(fieldname)) {               //move to next token               jsonParser.nextToken();               System.out.println(jsonParser.getText());                     }            if("age".equals(fieldname)){               //move to next token               jsonParser.nextToken();               System.out.println(jsonParser.getNumberValue());                     }            if("verified".equals(fieldname)){               //move to next token               jsonParser.nextToken();               System.out.println(jsonParser.getBooleanValue());                     }            if("marks".equals(fieldname)){               //move to [                jsonParser.nextToken();               // loop till token equal to "]"               while (jsonParser.nextToken() != JsonToken.END_ARRAY) {                  System.out.println(jsonParser.getNumberValue());                }            }         }      } catch (JsonParseException e) {         e.printStackTrace();      } catch (JsonMappingException e) {         e.printStackTrace();      } catch (IOException e) {         e.printStackTrace();      }   } }


验证结果

使用 javac 编译器编译类,如下所示:

C:\ _Jackson_WORKSPACE> javac JacksonTester. java


现在运行jacksonTester查看结果:

C :\ _Jackson_WORKSPACE> java JacksonTester


验证输出

Mahesh Kumar 21 false [100,90,85]