1。始めましょう
ジャクソンには、JavaオブジェクトとJSONの交換に使用される非常に実用的なオブジェクトマッパークラスがあります。
1.JSON [JSON Serialization]へのJavaオブジェクト
java.io.ioexceptionをインポートします。 java.text.parseexceptionをインポートします。 java.text.simpledateformatをインポートします。 com.fasterxml.jackson.databind.objectmapperをインポートします。 Public Class Jacksondemo {public static void main(string [] args)throws parseexception、ioexception {user user = new user(); user.setname( "xiaomin"); user.setemail( "[email protected]"); user.setage(20); SimpleDateFormat dateFormat = new SimpledateFormat( "yyyy-mm-dd"); user.setbirthday(dateformat.parse( "1996-10-01")); /*** ObjectMapperはJSONオペレーションの中核であり、JacksonのすべてのJSONオペレーションがObjectMapperに実装されています。 * ObjectMapperには複数のJSONシリアル化メソッドがあり、ファイル、OutputStreamなどのさまざまなメディアでJSON文字列を保存できます。 * writevalue(outputstream arg0、object arg1)はarg1をjsonシーケンスに変換し、arg0出力ストリームに保存します。 * WriteValueAsbytes(Object Arg0)はArg0をJSONシーケンスに変換し、結果をバイト配列に出力します。 * WriteValueAsstring(Object Arg0)はArg0をJSONシーケンスに変換し、結果を文字列に出力します。 */ objectMapper mapper = new objectMapper(); // jsonへのユーザークラス// output result:{"name": "xiaomin"、 "age":20、 "Birthday":844099200000、 "email": "[email protected]"} string json = mapper.writevalueasstring(user); System.out.println(json); // JSONへのJavaコレクション//出力結果:[{"name": "xiaomin"、 "age":20、birthd ":844099200000、" email ":" [email protected] "}]リスト<ユーザー> users = new arraylist <ユーザー>(); users.add(user); string jsonlist = mapper.writevalueasstring(users); System.out.println(jsonList); }}2.JSONからJavaクラス[JSON脱介入]
java.io.ioexceptionをインポートします。 java.text.parseexceptionをインポートします。 com.fasterxml.jackson.databind.objectmapperをインポートします。 Public Class Jacksondemo {public static void main(string [] args)throws parseexception、ioexception {string json = "{/" name/":/"xiaomin/":/":/"birthday/":8444099200000,/" / ** * objectMapperは、byte []、file、inputstream、文字列などからのjsonの降下をサポートします。ユーザーユーザー= mapper.readValue(json、user.class); System.out.println(user); }}
2。ジャクソンは3つの使用方法をサポートしています:
1。データバインディング:使用するのが最も便利です。
(1)完全なデータバインディング:
private static final string model_binding = "{/" name/":/" name1/"、/" type/":1}"; public void fulldatabinding()throws Exception {objectMapper mapper = new objectMapper(); Model user = mapper.readValue(model_binding、model.class); // readvalueへのエンティティクラス。 System.out.println(user.getName()); system.out.println(user.getType()); }モデルクラス:
プライベート静的クラスモデル{プライベート文字列名;プライベートINTタイプ。 public string getName(){return name; } public void setName(string name){this.name = name; } public int getType(){return type; } public void setType(intタイプ){this.type = type; }}(2)生データのバインディング:
/ **ジャクソンが単純なデータバインディングに使用するコンクリートジャバタイプは次のとおりです。JSONタイプJavaタイプJavaタイプLinkedHashmap、ObjectEdhashmap、Object ArrayList <Object>文字列番号(分数なし)整数、長期またはbiginteger(最小該当する)数(分数)ダブル(bigdecimalを使用するために構成可能)真のnull*/ fals boolean例外{objectMapper mapper = new objectMapper(); Hashmap Map = mapper.readValue(model_binding、hashmap.class); //プリミティブデータ型へのreadvalue。 system.out.println(map.get( "name")); system.out.println(map.get( "type")); }(3)一般的なデータバインディング:
private static final string generic_binding = "{/" key1/":{/" name/":/" name2/"、/" type/":2}、/" key2/":{/" name/":/" name3/"、/" type/":3}}}"; public void genericdatabinding()throws exception {objectmapper mapper = new objectMapper(); hashmap <string、model> modelmap = mapper.readvalue(generic_binding、new Typereference <hashmap <string、model >>(){}); // paradigmデータへのreadvalue。モデルモデル= modelmap.get( "key2"); System.out.println(model.getName()); system.out.println(model.getType()); }2。ツリーモデル:最も柔軟です。
private static final string tree_model_binding = "{/" treekey1/":/" treevalue1/"、/" treekey2/":/" treevalue2/"、/" children/":[{/" childkey1/":/" childkey1/"}]}"; public void treemodelbinding()throws Exception {objectMapper mapper = new objectMapper(); jsonnode rootnode = mapper.readtree(tree_model_binding); //パスを取得してGETと同じ機能を取得しますが、ノードが見つからない場合、NULLの代わりに欠落しているノードを返します。 string treekey2value = rootnode.path( "treekey2")。getTextValue(); // system.out.println( "treekey2value:" + treekey2value); jsonnode childrennode = rootnode.path( "children"); string childkey1value = childrynode.get(0).path( "childkey1")。getTextValue(); system.out.println( "childkey1value:"+childkey1value); // root node objectnode root = mapper.createObjectNode()を作成します。 // Chrese Child Node1 objectNode node1 = mapper.createObjectNode(); node1.put( "nodekey1"、1); node1.put( "nodekey2"、2); //バインドチャイルドノード1 root.put( "child"、node1); // arraynode arraynode = mapper.createarraynode(); arraynode.add(node1); arraynode.add(1); //配列ノードroot.put( "arraynode"、arraynode)をバインドします。 // jsonはツリーノードを読み取りますjsonnode valuetotreenode = mappper.valuetotree(tree_model_binding); // json node root.put( "valuetotreenode"、valuetotreenode); // jsonノードオブジェクトJsonnode bindjsonnode = mappper.readvalue(generic_binding、jsonnode.class); // JSONをJSONノードオブジェクトにバインドします。 // json node root.put( "bindjsonnode"、bindjsonnode); system.out.println(mapper.writevalueasstring(root)); } 3。ストリーミングAPI:最高のパフォーマンス。
高性能要件を持つプログラムの場合、ストリーミングAPIを使用することをお勧めします。それ以外の場合、JSongeneratorまたはJSonParserを作成するかどうかにかかわらず、他の方法を使用して、JSonFactoryが使用されます。
パッケージcom.jingshou.jackson; java.io.fileをインポートします。 java.io.ioexceptionをインポートします。 com.fasterxml.jackson.core.jsonencodingをインポートします。 com.fasterxml.jackson.core.jsonfactoryをインポートします。 com.fasterxml.jackson.core.jsongeneratorをインポートします。 com.fasterxml.jackson.core.jsonparserをインポートします。 com.fasterxml.jackson.core.jsontokenをインポートします。 public class jacksontest6 {public static void main(string [] args)throws ioexception {jsonfactory jfactory = new jsonfactory(); /***ファイルへの書き込み***/jSongenerator jgenerator = jfactory.creategenerator(new file( "c://user.json")、jsonencoding.utf8); jgenerator.writestartobject(); // {jgenerator.writestringfield( "name"、 "mkyong"); // "name": "mkyong" jgenerator.writeNumberfield( "age"、29); // "age":29 jgenerator.writefieldname( "messages"); //「メッセージ」:jgenerator.writestartarray(); // [jgenerator.writestring( "msg 1"); // "msg 1" jgenerator.writestring( "msg 2"); // "msg 2" jgenerator.writestring( "msg 3"); // "msg 3" jgenerator.writeendarray(); //] jgenerator.writeendobject(); //} jgenerator.close(); /***ファイルから読み取り***/jsonparser jparser = jfactory.createparser(new file( "c://user.json")); //トークンが "}"に等しくなるまでループ(jparser.nexttoken()!= jsontoken.end_object){string fieldname = jparser.getCurrentName(); if( "name" .equals(fieldname)){//現在のトークンは「name」です。 System.out.println(jparser.getText()); // mkyong}を表示} if( "age" .equals(fieldname)){//現在のトークンは "age"、// nextに移動します。 System.out.println(jparser.getIntValue()); //表示29} if( "messages" .equals(fieldname)){jparser.nexttoken(); //現在のトークンは「["、[次へ]を移動します//メッセージは配列、トークンは「]」に等しくなるまでループです。 }}} jparser.close(); }}