程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> 解析Java的Jackson庫中Streaming API的應用

解析Java的Jackson庫中Streaming API的應用

編輯:關於JAVA

解析Java的Jackson庫中Streaming API的應用。本站提示廣大學習愛好者:(解析Java的Jackson庫中Streaming API的應用)文章只能為提供參考,不一定能成為您想要的結果。以下是解析Java的Jackson庫中Streaming API的應用正文


流式API讀取和寫入JSON內容團圓事宜。 JsonParser讀取數據,而JsonGenerator寫入數據。它是三者中最有用的辦法,是最低開支和最快的讀/寫操作。它相似於XML的Stax解析器。

在本文中,我們將展現的應用Jackson的流式API 讀寫JSON數據。流式API任務應用JSON為每個細節的都是要當心處置。上面的例子將應用兩個類:
JsonGenerator類——寫入JSON字符串。
sonGenerator是界說公共API編寫的Json內容的基類。應用JsonFactory實例的工場辦法創立實例。

類聲明
以下是org.codehaus.jackson.JsonGenerator類的聲明:

public abstract class JsonGenerator
  extends Object
   implements Closeable

嵌套類
S.N. 類和解釋 1 static class JsonGenerator.Feature//列舉界說了生成器的一切togglable功效。
字段
protected PrettyPrinter _cfgPrettyPrinter - 對象處置相當打印(平日過剩的空白,使成果加倍可讀)輸入時。

結構函數
S.N. 類和解釋 1 Default constructor

JsonParser類——解析JSON字符串。
JsonParser是界說公共API用於讀取的Json內容的基類。應用JsonFactory實例的工場辦法創立實例。

類聲明
以下是org.codehaus.jackson.JsonParser類的聲明:

public abstract class JsonParser
  extends Object
   implements Closeable, Versioned

嵌套類
S.N. 類和解釋 1 static class JsonParser.Feature //列舉界說懂得析器的一切togglable功效。 2 static class JsonParser.NumberType //列舉可用於數字能夠的“當地”(最好)類型。
字段

  • protected PrettyPrinter _cfgPrettyPrinter - 對象處置相當打印(平日過剩的空白,使成果加倍可讀)輸入。
  • protected JsonToken _currToken - 經由過程nextToken()檢索最初一個令牌(若有)。
  • protected int _features - 位標記位,注解其已啟用JsonParser.Features組成。
  • protected JsonToken _lastClearedToken - 最初消除令牌假如有的話:也就是值有用時clearCurrentToken()被挪用。

結構函數
S.N. 類和解釋 1 protected JsonParser() //默許的結構函數 2 protected JsonParser(int features)

繼續的辦法
這個類繼續了以下類辦法:

java.lang.Object


應用JsonGenerator寫入JSON
應用JsonGenerator長短常簡略的。起首應用JsonFactory.createJsonGenerator()辦法創立一個JsonGenerator,並用write***()辦法來寫每個JSON值。

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

讓我們來看看JsonGenerator操作。創立一個名為JacksonTester的Java類文件在目次 C:\>Jackson_WORKSPACE.

File: JacksonTester.java

import java.io.File;
import java.io.IOException;
import java.util.Map;

import org.codehaus.jackson.JsonEncoding;
import org.codehaus.jackson.JsonFactory;
import org.codehaus.jackson.JsonGenerator;
import org.codehaus.jackson.JsonParseException;
import org.codehaus.jackson.map.JsonMappingException;
import org.codehaus.jackson.map.ObjectMapper;

public class JacksonTester {
  public static void main(String args[]){
   JacksonTester tester = new JacksonTester();
   try {     
     JsonFactory jasonFactory = new JsonFactory();

     JsonGenerator jsonGenerator = jasonFactory.createJsonGenerator(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();
   }
  }
}

驗證成果

應用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();
JJsonParser 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的操作。創立一個名為JacksonTester在Java類在文件夾 C:\>Jackson_WORKSPACE.

文件: JacksonTester.java

import java.io.File;
import java.io.IOException;

import org.codehaus.jackson.JsonEncoding;
import org.codehaus.jackson.JsonFactory;
import org.codehaus.jackson.JsonGenerator;
import org.codehaus.jackson.JsonParseException;
import org.codehaus.jackson.JsonParser;
import org.codehaus.jackson.JsonToken;
import org.codehaus.jackson.map.JsonMappingException;

public class JacksonTester {
  public static void main(String args[]){
   JacksonTester tester = new JacksonTester();
   try {     
     JsonFactory jasonFactory = new JsonFactory();

     JsonGenerator jsonGenerator = jasonFactory.createJsonGenerator(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 = 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());     
      }
      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]

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved