Jackson - Akış API'si
Akış API'si JSON içeriğini ayrı olaylar olarak okur ve yazar. JsonParser verileri okurken, JsonGenerator verileri yazar. Üçü arasında en güçlü yaklaşımdır ve en düşük ek yüke sahiptir ve okuma / yazma işlemlerinde en hızlıdır. XML için Stax ayrıştırıcısının Analogus'udur.
Bu Makalede, JSON verilerini okumak ve yazmak için Jackson akış API'larını kullanmayı göstereceğiz. Streaming API, token konseptiyle çalışır ve Json'un her detayı dikkatli bir şekilde ele alınmalıdır. Örneklerde kullanacağımız iki sınıf aşağıdadır:
JsonGenerator - JSON String'e yazın.
JsonParser - JSON Dizesini ayrıştırın.
JsonGenerator kullanarak JSON yazma
JsonGenerator'ı kullanmak oldukça basittir. Öncelikle JsonFactory.createJsonGenerator () yöntemini kullanarak JsonGenerator'ı oluşturun ve her bir json değerini yazmak için bunun write *** () yöntemlerini kullanın.
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'ü çalışırken görelim. JacksonTester adlı bir java sınıf dosyası oluşturun.C:\>Jackson_WORKSPACE.
Dosya: 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
Kullanarak sınıfları derleyin javac aşağıdaki gibi derleyici:
C:\Jackson_WORKSPACE>javac JacksonTester.java
Şimdi sonucu görmek için jacksonTester'ı çalıştırın:
C:\Jackson_WORKSPACE>java JacksonTester
Çıkışı Doğrulayın
Mahesh Kumar
21
false
[100, 90, 85]
JsonParser kullanarak JSON okuma
JsonParser'ı kullanmak yine oldukça basit. Önce JsonFactory.createJsonParser () yöntemini kullanarak JsonParser'ı oluşturun ve her bir json dizesini belirteç olarak okumak için bunun nextToken () yöntemlerini kullanın. Her jetonu kontrol edin ve uygun şekilde işleyin
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'ı iş başında görelim. JacksonTester adlı bir java sınıf dosyası oluşturun.C:\>Jackson_WORKSPACE.
Dosya: 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
Kullanarak sınıfları derleyin javac aşağıdaki gibi derleyici:
C:\Jackson_WORKSPACE>javac JacksonTester.java
Şimdi sonucu görmek için jacksonTester'ı çalıştırın:
C:\Jackson_WORKSPACE>java JacksonTester
Çıkışı Doğrulayın
Mahesh Kumar
21
false
[100, 90, 85]