亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

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

 更新時(shí)間:2016年01月13日 10:57:19   投稿:goldensun  
這篇文章主要介紹了解析Java的Jackson庫中Streaming API的使用,Jackson被用于Java對(duì)象和JSON的互相轉(zhuǎn)換,需要的朋友可以參考下

流式API讀取和寫入JSON內(nèi)容離散事件。 JsonParser讀取數(shù)據(jù),而JsonGenerator寫入數(shù)據(jù)。它是三者中最有效的方法,是最低開銷和最快的讀/寫操作。它類似于XML的Stax解析器。

在本文中,我們將展示的使用Jackson的流式API 讀寫JSON數(shù)據(jù)。流式API工作使用JSON為每一個(gè)細(xì)節(jié)的都是要小心處理。下面的例子將使用兩個(gè)類:
JsonGenerator類——寫入JSON字符串。
sonGenerator是定義公共API編寫的Json內(nèi)容的基類。使用JsonFactory實(shí)例的工廠方法創(chuàng)建實(shí)例。

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

public abstract class JsonGenerator
  extends Object
   implements Closeable

嵌套類

S.N. 類和說明
1 static class JsonGenerator.Feature//枚舉定義了生成器的所有togglable功能。

字段
protected PrettyPrinter _cfgPrettyPrinter - 對(duì)象處理相當(dāng)打印(通常多余的空白,使結(jié)果更加可讀)輸出時(shí)。

構(gòu)造函數(shù)

S.N. 類和說明
1 Default constructor

JsonParser類——解析JSON字符串。
JsonParser是定義公共API用于讀取的Json內(nèi)容的基類。使用JsonFactory實(shí)例的工廠方法創(chuàng)建實(shí)例。

類聲明
以下是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 //枚舉可用于數(shù)字可能的“本地”(最佳)類型。

字段

  • protected PrettyPrinter _cfgPrettyPrinter - 對(duì)象處理相當(dāng)打印(通常多余的空白,使結(jié)果更加可讀)輸出。
  • protected JsonToken _currToken - 通過nextToken()檢索最后一個(gè)令牌(如有)。
  • protected int _features - 位標(biāo)志位,表明其已啟用JsonParser.Features構(gòu)成。
  • protected JsonToken _lastClearedToken - 最后清除令牌如果有的話:也就是值有效時(shí)clearCurrentToken()被調(diào)用。

構(gòu)造函數(shù)

S.N. 類和說明
1 protected JsonParser() //默認(rèn)的構(gòu)造函數(shù)
2 protected JsonParser(int features)

繼承的方法
這個(gè)類繼承了以下類方法:

復(fù)制代碼 代碼如下:

java.lang.Object


使用JsonGenerator寫入JSON
使用JsonGenerator是非常簡(jiǎn)單的。首先使用JsonFactory.createJsonGenerator()方法創(chuàng)建一個(gè)JsonGenerator,并用write***()方法來寫每一個(gè)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操作。創(chuàng)建一個(gè)名為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();
   }
  }
}

驗(yàn)證結(jié)果

使用javac編譯如下類:

復(fù)制代碼 代碼如下:

C:\Jackson_WORKSPACE>javac JacksonTester.java


現(xiàn)在運(yùn)行jacksonTester看到的結(jié)果:

復(fù)制代碼 代碼如下:

C:\Jackson_WORKSPACE>java JacksonTester



驗(yàn)證輸出

Mahesh Kumar
21
false
[100, 90, 85]

使用JsonParser 讀取JSON
使用JsonParser是非常簡(jiǎn)單的。首先使用JsonFactory.createJsonParser()方法創(chuàng)建JsonParser,并使用它的nextToken()方法來讀取每個(gè)JSON字符串作為標(biāo)記。檢查每個(gè)令牌和相應(yīng)的過程。

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的操作。創(chuàng)建一個(gè)名為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();
   }
  }
}

驗(yàn)證結(jié)果

編譯使用javac編譯如下類:

復(fù)制代碼 代碼如下:

C:\Jackson_WORKSPACE>javac JacksonTester.java


現(xiàn)在運(yùn)行 jacksonTester 看到結(jié)果如下:

復(fù)制代碼 代碼如下:

C:\Jackson_WORKSPACE>java JacksonTester


驗(yàn)證輸出

Mahesh Kumar
21
false
[100, 90, 85]

相關(guān)文章

  • SpringBoot構(gòu)造器注入循環(huán)依賴及解決方案

    SpringBoot構(gòu)造器注入循環(huán)依賴及解決方案

    這篇文章主要介紹了SpringBoot構(gòu)造器注入循環(huán)依賴及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-03-03
  • 詳談java線程與線程、進(jìn)程與進(jìn)程間通信

    詳談java線程與線程、進(jìn)程與進(jìn)程間通信

    下面小編就為大家?guī)硪黄斦刯ava線程與線程、進(jìn)程與進(jìn)程間通信。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-04-04
  • Java實(shí)現(xiàn)限流接口的示例詳解

    Java實(shí)現(xiàn)限流接口的示例詳解

    限流是對(duì)某一時(shí)間窗口內(nèi)的請(qǐng)求數(shù)進(jìn)行限制,保持系統(tǒng)的可用性和穩(wěn)定性,防止因流量暴增而導(dǎo)致的系統(tǒng)運(yùn)行緩慢或宕機(jī),本文主要來和大家聊聊如何使用java實(shí)現(xiàn)限流接口,感興趣的可以了解下
    2023-12-12
  • Java定義泛型接口和類的方法實(shí)例分析

    Java定義泛型接口和類的方法實(shí)例分析

    這篇文章主要介紹了Java定義泛型接口和類的方法,結(jié)合實(shí)例形式分析了泛型相關(guān)概念、原理及泛型接口與類的定義實(shí)現(xiàn)方法,需要的朋友可以參考下
    2019-08-08
  • 解析java中super的用法分析

    解析java中super的用法分析

    本篇文章是對(duì)java中super的用法進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-05-05
  • 詳解java Collections.sort的兩種用法

    詳解java Collections.sort的兩種用法

    這篇文章主要介紹了詳解java Collections.sort的兩種用法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-07-07
  • 解決org.apache.ibatis.binding.BindingException:?Invalid?bound?statement?(not?found)問題(最新推薦)

    解決org.apache.ibatis.binding.BindingException:?Invalid?boun

    這篇文章主要介紹了解決org.apache.ibatis.binding.BindingException:?Invalid?bound?statement?(not?found)問題,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-05-05
  • springboot-啟動(dòng)bean沖突的解決

    springboot-啟動(dòng)bean沖突的解決

    這篇文章主要介紹了springboot-啟動(dòng)bean沖突的解決,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-03-03
  • SpringData @Query和@Modifying注解原理解析

    SpringData @Query和@Modifying注解原理解析

    這篇文章主要介紹了SpringData @Query和@Modifying注解原理解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-08-08
  • java.math包下計(jì)算浮點(diǎn)數(shù)和整數(shù)的類的實(shí)例

    java.math包下計(jì)算浮點(diǎn)數(shù)和整數(shù)的類的實(shí)例

    這篇文章主要介紹了java.math包下計(jì)算浮點(diǎn)數(shù)和整數(shù)的類的實(shí)例代碼,本文通過使用BigDecimal進(jìn)行浮點(diǎn)數(shù)比較給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-02-02

最新評(píng)論