国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Java > 正文

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

2019-11-26 14:41:08
字體:
來源:轉載
供稿:網友

流式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 Kumar21false[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 Kumar21false[100, 90, 85]

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 老河口市| 丰原市| 阿勒泰市| 措美县| 峨边| 慈溪市| 峨眉山市| 剑河县| 菏泽市| 南华县| 阳西县| 黄冈市| 金沙县| 通许县| 社旗县| 遵义市| 东乡县| 高唐县| 兴城市| 抚宁县| 城步| 龙门县| 昔阳县| 汝南县| 云龙县| 东乌珠穆沁旗| 抚顺市| 营山县| 海伦市| 德化县| 宾川县| 缙云县| 定陶县| 永修县| 土默特右旗| 东乌珠穆沁旗| 杂多县| 宁阳县| 九龙县| 大竹县| 鄂温|