Jackson - API truyền trực tuyến

Streaming API đọc và ghi nội dung JSON dưới dạng các sự kiện rời rạc. JsonParser đọc dữ liệu trong khi JsonGenerator ghi dữ liệu. Đây là cách tiếp cận mạnh mẽ nhất trong số ba cách tiếp cận và có chi phí thấp nhất và nhanh nhất trong các tùy chọn đọc / ghi. Nó là trình phân tích cú pháp Analogus to Stax cho XML.

Trong Bài viết này, chúng tôi sẽ giới thiệu việc sử dụng các API phát trực tuyến của Jackson để đọc và ghi dữ liệu JSON. Streaming API hoạt động với khái niệm mã thông báo và mọi chi tiết của Json phải được xử lý cẩn thận. Sau đây là hai lớp mà chúng tôi sẽ sử dụng trong các ví dụ:

  • JsonGenerator - Ghi vào Chuỗi JSON.

  • JsonParser - Phân tích cú pháp chuỗi JSON.

Viết JSON bằng JsonGenerator

Sử dụng JsonGenerator khá đơn giản. Đầu tiên hãy tạo JsonGenerator bằng phương thức JsonFactory.createJsonGenerator () và sử dụng phương thức write *** () của nó để ghi mỗi giá trị 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");

Hãy xem JsonGenerator hoạt động. Tạo tệp lớp java có tên JacksonTester trongC:\>Jackson_WORKSPACE.

Tệp: 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<String,Object> 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(); }
   }
}

Verify the result

Biên dịch các lớp bằng cách sử dụng javac trình biên dịch như sau:

C:\Jackson_WORKSPACE>javac JacksonTester.java

Bây giờ hãy chạy jacksonTester để xem kết quả:

C:\Jackson_WORKSPACE>java JacksonTester

Xác minh đầu ra

Mahesh Kumar
21
false
[100, 90, 85]

Đọc JSON bằng JsonParser

Sử dụng JsonParser một lần nữa khá đơn giản. Đầu tiên tạo JsonParser bằng phương thức JsonFactory.createJsonParser () và sử dụng phương thức nextToken () của nó để đọc từng chuỗi json dưới dạng mã thông báo. Kiểm tra từng mã thông báo và xử lý phù hợp

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

Hãy xem JsonParser hoạt động. Tạo tệp lớp java có tên JacksonTester trongC:\>Jackson_WORKSPACE.

Tệp: 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();
      }
   }
}

Verify the result

Biên dịch các lớp bằng cách sử dụng javac trình biên dịch như sau:

C:\Jackson_WORKSPACE>javac JacksonTester.java

Bây giờ hãy chạy jacksonTester để xem kết quả:

C:\Jackson_WORKSPACE>java JacksonTester

Xác minh đầu ra

Mahesh Kumar
21
false
[100, 90, 85]