JavaのJacksonライブラリにおけるStreaming APIの使用を解析する
9768 ワード
ストリーミングAPIはJSONコンテンツ離散イベントを読み取り、書き込みます.JsonParserはデータを読み込み、JsonGeneratorはデータを書き込みます.これは3つの中で最も効果的な方法であり、最低コストと最も速い読み取り/書き込み操作である.XMLのStax解析器に似ています.
本稿では,Jacksonを用いたストリーミングAPI読み書きJSONデータを示す.ストリーミングAPIの仕事はJSONを使ってすべての細部のために注意して処理します.次の例では、JsonGeneratorクラス――JSON文字列を書き込む2つのクラスを使用します.sonGeneratorは、共通APIによって記述されるJsonコンテンツを定義するベースクラスである.JsonFactoryインスタンスのファクトリメソッドを使用してインスタンスを作成します.
クラス宣言以下はorg.codehaus.jackson.JsonGeneratorクラスの宣言です.
ネストされたクラス
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クラスの宣言です.
ネストされたクラス
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)
継承メソッドこのクラスは、次のクラスメソッドを継承します.
JsonGeneratorを使用してJSONに書き込みJsonGeneratorを使用するのは簡単です.まずJsonFactory.createJsonGenerator()メソッドを使用してJsonGeneratorを作成し、各JSON値をwrite***()メソッドで書きます.
JsonGeneratorの操作を見てみましょう.JacksonTesterというJavaクラスファイルをディレクトリC:>Jackson_に作成WORKSPACE.
File: JacksonTester.java
検証結果
Javacを使用して次のクラスをコンパイルします.
今jacksonTesterを実行して見た結果:
出力の検証
JsonParserでJSONを読み取るJsonParserを使うのはとても簡単です.まずJsonFactory.createJsonParser()メソッドを使用してJsonParserを作成し、そのnextToken()メソッドを使用して各JSON文字列をタグとして読み込みます.各トークンと対応するプロシージャを確認します.
JsonParserの操作を見てみましょう.JacksonTesterという名前のJavaクラスフォルダC:>Jackson_を作成WORKSPACE.
ファイル:JacksonTester.java
検証結果
コンパイルはjavacを使用して次のクラスをコンパイルします.
jacksonTesterを実行すると、次の結果が表示されます.
出力の検証
本稿では,Jacksonを用いたストリーミングAPI読み書きJSONデータを示す.ストリーミングAPIの仕事はJSONを使ってすべての細部のために注意して処理します.次の例では、JsonGeneratorクラス――JSON文字列を書き込む2つのクラスを使用します.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//は、数値的に使用可能な「ローカル」(最適)タイプを列挙します.
フィールド
コンストラクタ
S.N.
クラスと説明
1
protected JsonParser()/デフォルトのコンストラクタ
2
protected JsonParser(int features)
継承メソッドこのクラスは、次のクラスメソッドを継承します.
java.lang.Object
JsonGeneratorを使用してJSONに書き込みJsonGeneratorを使用するのは簡単です.まずJsonFactory.createJsonGenerator()メソッドを使用してJsonGeneratorを作成し、各JSON値をwrite***()メソッドで書きます.
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 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]