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]