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]