ストリーミングAPIは、JSONコンテンツに個別のイベントを読み取り、書き込みます。 JSonParserはデータを読み取り、JSongeneratorはデータを書き込みます。これは、3つの中で最も効率的な方法であり、最も低いオーバーヘッドと最速の読み取り/書き込み操作です。 XMLのSTAXパーサーに似ています。
この記事では、JacksonのストリーミングAPIを使用してJSONデータを読み書きする方法を示します。すべての詳細に対してJSONを使用してAPIをストリーミングすることは、注意して処理する必要があります。次の例では、2つのクラスを使用します。
jsongeneratorクラス - json stringに書き込みます。
Songeneratorは、Public APIによって書かれたJSONコンテンツを定義する基本クラスです。 JSONFactoryインスタンスの工場メソッドを使用してインスタンスを作成します。
クラス宣言以下は、org.codehaus.jackson.jsongeneratorクラスの宣言です。
パブリックアブストラクトクラスJSongeneratorは、オブジェクトを拡張します
ネストされたクラス
| sn | クラスと説明 |
|---|---|
| 1 | 静的クラスjsongenerator.feature //列挙は、ジェネレーターのすべてのトッジ可能な関数を定義します。 |
コンストラクタ
| sn | クラスと説明 |
|---|---|
| 1 | デフォルトのコンストラクター |
JSonParserクラス - JSON文字列を解析します。
JSonParserは、パブリックAPIが読むために使用されるJSONコンテンツを定義する基本クラスです。 JSONFactoryインスタンスの工場メソッドを使用してインスタンスを作成します。
クラス宣言以下は、org.codehaus.jackson.jsonparserクラスの宣言です。
パブリックアブストラクトクラスjsonparserは、クローズ可能なバージョンでオブジェクトを拡張します
ネストされたクラス
| sn | クラスと説明 |
|---|---|
| 1 | 静的クラスjsonparser.feature //列挙は、パーサーのすべてのトッジ可能な関数を定義します。 |
| 2 | 静的クラスjsonparser.numbertype //列挙は、「ローカル」(最適な)タイプの数値に使用できます。 |
コンストラクタ
| sn | クラスと説明 |
|---|---|
| 1 | Protected JSonParser()//デフォルトコンストラクター |
| 2 | 保護されたjsonparser(int feature) |
継承方法このクラスは、次のクラスの方法を継承します。
コードコピーは次のとおりです。
java.lang.object
JSongeneratorを使用してJSONに書き込みます
JSongeneratorを使用するのは非常に簡単です。まず、jsonfactory.createjsongenerator()メソッドを使用してjsongeneratorを作成し、write ***()メソッドを使用して各json値を書き込みます。
jsonFactory jasonfactory = new jsonFactory(); jsongenerator jsongenerator = jasonfactory.createjsongenerator(new file( "desudent.json")、jsonencoding.utf8); // {jsongenerator.writestartobject(); // "mahesh": "mahesh kumar "jsongenerator.writestringfield(" name "、" mahesh kumar ");JSongeneratorの操作を見てみましょう。ディレクトリC:/> jackson_workspaceでJackSontesterという名前のJavaクラスファイルを作成します。
ファイル:JackSontester.java
java.io.file; Import java.io.ioexception; Import java.util.map; Import org.codehaus.jackson.jsonencoding; Import org.codehaus.jackson.jsonactory; Import org.codehaus.jackson.jsongenerator; Import.codeaus.Jackson.Jackson.json.jsonexsonce org.codehaus.jackson.map.jsonmappingexception; Import org.codehaus.jackson.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); //「マーク」:[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 = new objectMapper(); map <string、object> datamap = mapper.readValue(new File( "desutent.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を作成し、次のtoken()メソッドを使用して、各json文字列をタグとして読み取ります。各トークンと対応するプロセスを確認します。
jsonFactory jasonfactory = new jsonFactory(); jjsonparser jsonparser = jasonfactory.createjsonparser(new file( "desudent.json")); if( "name" .equals(fieldname)){//次のtoken jsonparser.nexttoken();に移動します; System.out.println(jsonparser.getText()); }}JsonParserの業務を見てみましょう。フォルダーC:/> Jackson_WorkspaceでJavaのJackSontesterという名前のクラスを作成します。
ファイル:JackSontester.java
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.jsonperseexs. 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(); // sustent.json // {// "name": "mahesh kumar"、// "age":21、// "verified":false、 "marks":[100,90,85] //} jsonparser = jasonfactory.createjsonparser(新しいファイル(新しいファイル); while(jsonparser.nexttoken()!= jsontoken.end_object){//現在のトークン文字列fieldname = jsonparser.getCurrentName(); if( "name" .equals(fieldname)){//次のtoken jsonparser.nexttoken();に移動します; System.out.println(jsonparser.getText()); } if( "age" .equals(fieldname)){// next token jsonparser.nexttoken();に移動します; System.out.println(jsonparser.getNumberValue()); } if( "verified" .equals(fieldname)){// next token jsonparser.nexttoken();に移動します; System.out.println(jsonparser.getBooleanValue()); } if( "marks" .equals(fieldname)){// [jsonparser.nexttoken();に移動します。 // loop till till token equal "]" 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]