Jackson学習ノート(一)Jackson解析Json
6839 ワード
ジャックソンを初めて知った
jarファイルをインポートするには:
一、Jacksonの紹介
1、Jackson
JacksonはJavaベースのアプリケーションライブラリで、JacksonはJavaオブジェクトを簡単にjsonオブジェクトとxmlドキュメントに変換することができ、json、xmlをJavaオブジェクトに変換することもできます.Jacksonが依存するjarパッケージは少なく、簡単で使いやすく、性能も比較的高く、Jacksonコミュニティは比較的活発で、更新速度も比較的速い.
Jacksonは、ストリーム処理jsonだけでなく、データバインディング(POJOとJSON間の相互変換)もサポートし、他のサードパーティ製ライブラリでサポートされているデータフォーマットも多く拡張しています.
2、Jacksonの三つのコアモジュール:
Jackson-core:JSON処理の詳細を含む低レベルのストリームAPIを定義します.
Jackson-annotations:Jacksonの注釈が含まれています.
Jackson-databind:オブジェクトとJSON間の変換が実現され、このパケットは上の2つのパケットに依存します.
3、JSONの解析方法:
JSONを分割して解析する方法はいくつかありますが、3つにまとめることができます.反復:Tokenストリームと呼ばれるイベントストリームの反復 データバインディング:Jsonデータをオブジェクトにバインディング 遍歴ツリー:ツリー構造を構築し、適切な方法で遍歴 4、対応するJavaのAPI:SAXとStax.これは、イベントフローを巡回するためのいくつかの基本的なAPIを提供する.その中で、SAXは自発的にeventをあなたに押して(push)、Staxはあなたに自発的にこのイベントフロー(pull)を遍歴させることができます.1つはpush,1つはpullであるが,イベントフローはすべて同じであり,表現方式が異なるだけである.イベントcallbackのSAXを提供し、イベントのStaxをアクティブに巡回し、Stax Cursor API(カーソル)もあります. JAXBはデータバインディングの標準である.n+1の代替品(Jibx,XMLBEans,Castorなど)がありますが、それらはすべてこのようにしています:(Java)オブジェクトをxmlに変換し、逆に、その中のいくつかは便利で有効で、他のいくつかはそうではありません. DOMは「最も標準的な」APIであり、ツリー構造を定義する.しかし,データバインディングと同様に,(より良い)代替案(XOM,JDOM,DOM 4 j)はいくつかある.ノードごとに巡回することも、XPathを使用することもできます.
XMLばかりですが、JSONについて議論していますね!事実は証明して、フォーマットは重要ではありませんて、重要なのはこのような解析の思想です.
5、Jacksonが提供した3つのクラスに対応しています.コアパッケージ(jackson-core)には、イベントイベントイベントではなくトークンtokenと呼ばれるように反復トークンを許可するJsonParserおよびJsonGeneratorが含まれる. ObjectMapperはデータバインディング機能を実現した:JSONとObject間の相互変換. TreeMapperは、JSON文字列をツリー化したもので、ノード(JsonNode)とサブノード(JsonNode)が含まれています.
二、Javaオブジェクト転Json(ObjectMapper.writeValue()
POJO類:
jacksonで最も重要なクラスはObjectMapperであり、ドキュメント内のコメントは再利用可能であり、共有可能である.スレッドが安全なクラスであるべきです.機能は実体クラスがjsonになることとjsonを実体クラスに変えること、実体クラスがjsonになること、ObjectMapperオブジェクトはpublicのクラスメンバー変数またはgetメソッドのある変数のみをjson列に書く(setメソッドはなくてもよい).
注意:
POJOオブジェクトをjsonに変換すると、Jacksonはgetterメソッドを持つ属性やpublicと宣言されたフィールドのみをシーケンス化します.そうしないと、そのフィールドはシーケンス化されません.
1.POJOをjson形式に変換する文字列
2、POJOをjsonファイルに書き込む
3、集合オブジェクトをjsonファイルに書き込む
Javaでの集合は,jsonで対応するデータ結果が配列であり,もちろんJavaでの配列もJsonでの配列に対応する.
三、Json回転Javaオブジェクト(ObjectMapper.readValue()
受信タイプとjsonファイルのタイプが一致しない場合、入力不一致異常が発生し、オブジェクトのインスタンスが逆シーケンス化できないことを示します.
注意:
jsonのオブジェクトのフィールドタイプとPOJOのタイプが一致しないか、POJOのフィールド数より多い場合は、逆シーケンス化に成功しません.フィールドがgetterメソッドとsetterメソッドのいずれかを所有しているか、またはフィールドが公開タイプであることを保証します.このフィールドは逆シーケンス化に成功します.
1.json形式のString文字列をPOJOオブジェクトに変換する
2、jsonファイルをPOJO対象にする
3、配列タイプのjsonファイルをListセットにする
注意:
TypeReference,このクラスはcom.fasterxml.jackson.core.type.TypeReferenceパッケージで、パッケージを間違えないでください.
jarファイルをインポートするには:
jackson-annotations-2.9.9.jar
jackson-core-2.9.9.jar
jackson-databind-2.9.9.jar
一、Jacksonの紹介
1、Jackson
JacksonはJavaベースのアプリケーションライブラリで、JacksonはJavaオブジェクトを簡単にjsonオブジェクトとxmlドキュメントに変換することができ、json、xmlをJavaオブジェクトに変換することもできます.Jacksonが依存するjarパッケージは少なく、簡単で使いやすく、性能も比較的高く、Jacksonコミュニティは比較的活発で、更新速度も比較的速い.
Jacksonは、ストリーム処理jsonだけでなく、データバインディング(POJOとJSON間の相互変換)もサポートし、他のサードパーティ製ライブラリでサポートされているデータフォーマットも多く拡張しています.
2、Jacksonの三つのコアモジュール:
Jackson-core:JSON処理の詳細を含む低レベルのストリームAPIを定義します.
Jackson-annotations:Jacksonの注釈が含まれています.
Jackson-databind:オブジェクトとJSON間の変換が実現され、このパケットは上の2つのパケットに依存します.
3、JSONの解析方法:
JSONを分割して解析する方法はいくつかありますが、3つにまとめることができます.
XMLばかりですが、JSONについて議論していますね!事実は証明して、フォーマットは重要ではありませんて、重要なのはこのような解析の思想です.
5、Jacksonが提供した3つのクラスに対応しています.
二、Javaオブジェクト転Json(ObjectMapper.writeValue()
POJO類:
package main.java.StuJackson;
public class Student {
private String id;
private String name;
private String gender;
private String phone;
public Student() {}
public Student(String id, String name, String gender, String phone) {
this.id = id;
this.name = name;
this.gender = gender;
this.phone = phone;
}
// getter setter
@Override
public String toString() {
return "Student{" +
"id='" + id + '\'' +
", name='" + name + '\'' +
", gender='" + gender + '\'' +
", phone='" + phone + '\'' +
'}';
}
}
jacksonで最も重要なクラスはObjectMapperであり、ドキュメント内のコメントは再利用可能であり、共有可能である.スレッドが安全なクラスであるべきです.機能は実体クラスがjsonになることとjsonを実体クラスに変えること、実体クラスがjsonになること、ObjectMapperオブジェクトはpublicのクラスメンバー変数またはgetメソッドのある変数のみをjson列に書く(setメソッドはなくてもよい).
注意:
POJOオブジェクトをjsonに変換すると、Jacksonはgetterメソッドを持つ属性やpublicと宣言されたフィールドのみをシーケンス化します.そうしないと、そのフィールドはシーケンス化されません.
1.POJOをjson形式に変換する文字列
@Test
public void TestJOPO2Json1(){
// ObjectMapper
ObjectMapper mapper = new ObjectMapper();
Student student1 = new Student("001","Jack","Male","18765456543");
try {
// json
String stringPOJOJson = mapper.writeValueAsString(student1);
System.out.println(stringPOJOJson);
} catch (IOException e) {
e.printStackTrace();
}
}
2、POJOをjsonファイルに書き込む
@Test
public void TestJOPO2Json2(){
// ObjectMapper
ObjectMapper mapper = new ObjectMapper();
Student student1 = new Student("001","Jack","Male","18765456543");
try {
// json
mapper.writeValue(new File("json/jack.json"),student1);
} catch (IOException e) {
e.printStackTrace();
}
}
3、集合オブジェクトをjsonファイルに書き込む
@Test
public void TestJOPO2Json3(){
// ObjectMapper
ObjectMapper mapper = new ObjectMapper();
Student student2 = new Student("002","Tom","Male","18765466643");
Student student3 = new Student("003","JackSon","Male","18765477743");
List students = new ArrayList<>();
students.add(student2);
students.add(student3);
// json
try {
mapper.writeValue(new File("json/students.json"),students);
} catch (IOException e) {
e.printStackTrace();
}
}
Javaでの集合は,jsonで対応するデータ結果が配列であり,もちろんJavaでの配列もJsonでの配列に対応する.
三、Json回転Javaオブジェクト(ObjectMapper.readValue()
受信タイプとjsonファイルのタイプが一致しない場合、入力不一致異常が発生し、オブジェクトのインスタンスが逆シーケンス化できないことを示します.
com.fasterxml.jackson.databind.exc.MismatchedInputException:
Cannot deserialize instance of `main.StuJackson.TestPOJO2Json.Student` out of START_ARRAY token
注意:
jsonのオブジェクトのフィールドタイプとPOJOのタイプが一致しないか、POJOのフィールド数より多い場合は、逆シーケンス化に成功しません.フィールドがgetterメソッドとsetterメソッドのいずれかを所有しているか、またはフィールドが公開タイプであることを保証します.このフィールドは逆シーケンス化に成功します.
1.json形式のString文字列をPOJOオブジェクトに変換する
@Test
public void TestJson2JOPO1(){
//Json POJO
ObjectMapper mapper = new ObjectMapper();
String JackJson = "{\"id\":\"001\",\"name\":\"Jack\",\"gender\":\"Male\",\"phone\":\"18765456543\"}";
try {
Student Jack = mapper.readValue(JackJson,Student.class);
System.out.println(Jack.toString());
} catch (IOException e) {
e.printStackTrace();
}
}
2、jsonファイルをPOJO対象にする
@Test
public void TestJson2JOPO2(){
//Json POJO
ObjectMapper mapper = new ObjectMapper();
try {
Student Jack = mapper.readValue(new File("json/jack.json"),Student.class);
System.out.println(Jack.toString());
} catch (IOException e) {
e.printStackTrace();
}
}
3、配列タイプのjsonファイルをListセットにする
注意:
TypeReference,このクラスはcom.fasterxml.jackson.core.type.TypeReferenceパッケージで、パッケージを間違えないでください.
@Test
public void TestJson2JOPO3(){
//Json List
ObjectMapper mapper = new ObjectMapper();
try {
List students = mapper.readValue(new File("json/students.json"), new TypeReference>(){});
for (Student student : students) {
System.out.println(student.toString());
}
} catch (IOException e) {
e.printStackTrace();
}
}