JSON文字列とJavaオブジェクトの逆転[JSON-LIB]
開発プロセス中、多くの場合、他のシステムとデータを交換する必要があります。データ交換の形式にはXML、JSONなどが含まれます。JSONは、XMLよりも効率的な軽量データ形式です。 XMLは、間違いなくネットワークトラフィックを占めるタグをたくさん必要とします。 Jsonはこの点で良い仕事をしています。 JSONの形式を見てみましょう。
JSONには2つの形式を持つことができます。1つはオブジェクト形式で、もう1つは配列オブジェクトです。
{"name": "json"、 "address": "xicheng地区、北京"、 "age":25} // jsonのオブジェクト形式文字列[{"name": "json"、 "address": "xicheng地区、北京"、 "age":25}] //データオブジェクト形式上記の2つの形式から、オブジェクト形式と配列オブジェクト形式の唯一の違いは、[]が[]オブジェクト形式に追加されることであることがわかります。次に、特定の構造を見てください。どちらも、英語の状態でコンマ()で区切られたキー価値のペアの形で現れることがわかります。
この形式は、データ送信がフロントエンドおよびバックエンドで実行される場合にも非常に人気があります。バックエンドは、JSON形式の文字列を返します。フロントエンドは、JSのjson.parse()メソッドを使用してJSON文字列をJSONオブジェクトに解析し、次にフロントエンドを使用するためにトラバーサルを使用します。
このトピックにアクセスして、JavaのJSONオブジェクトとJavaオブジェクトの間の相互変換を紹介しましょう。
JSONオブジェクトとJavaオブジェクト間の相互転送を実現するには、サードパーティのJARパッケージを使用する必要があります。ここでは、JSON-LIB JARパッケージを使用します。ダウンロードアドレスは、https://sourceforge.net/projects/json-lib/です。 JSON-LIBには、Commons-Beanutils-1.8.0.jar、Commons-Collections-3.2.1.jar、Commons-Lang-2.5.Jar、Commons-Logging-1.1.jar、およびEzmorph-1.0.6.jarの5つのパッケージのサポートが必要です。自分でインターネットからダウンロードできます。ダウンロードアドレスはここに掲載されなくなります。
JSON-LIBは、JSonObject、JsonArrayなど、この関数を完了できるいくつかのクラスを提供します。クラスの名前から、変換されたjsonObjectはオブジェクト形式である必要があり、jsonarray変換されたjsonarrayは配列オブジェクト(つまり、[])であることがわかります。
1。Javaの通常のオブジェクトとJSON文字列の相互転送
Java Object-- 》》文字列
通常のJavaオブジェクトは、JavaのJava Bean、つまりエンティティクラスを指します。
パッケージcom.cn.study.day3;パブリッククラスの学生{//名前プライベート文字列名; //年齢のプライベート弦年齢。 //アドレスプライベート文字列アドレス。 public string getName(){return name; } public void setName(string name){this.name = name; } public string getage(){return age; } public void Setage(string age){this.age = age; } public string getAddress(){return Address; } public void setAddress(stringアドレス){this.address = address; } @Override public String toString(){return "sudent [name =" + name + "、age =" + age + "、address =" + address + "]"; }}上記は私の通常のJavaエンティティクラスです。JSON-LIBがそれを文字列形式に変換する方法をご覧ください、
public static void convertobject(){student stu = new sustent(); stu.setname( "json"); Stu.Setage( "23"); Stu.setaddress( "Beijing Xicheng District"); // 1。 jsonobject jsonobject json = jsonobject.fromobject(STU)を使用します。 // 2。 jsonarray jsonarray array = jsonarray.fromobject(STU)を使用します。 string strjson = json.toString(); string strarray = array.toString(); System.out.println( "strjson:"+strjson); System.out.println( "Strarray:"+Strarray); }学生のエンティティクラスを定義し、それぞれJSonObjectとJsonArrayを使用してJSON文字列に変換しました。以下に印刷された結果を見てみましょう。
strjson:{"address": "xicheng地区、北京"、 "age": "23"、 "name": "json"} strarray:[{"address": "xicheng地区、北京"、 "age": "23"、 "name": "json"}]結果から、両方の方法でJavaオブジェクトをJSON文字列に変換できることがわかりますが、変換された構造は異なります。
JSON String-》》Javaオブジェクト
上記では、JavaオブジェクトをJSON文字列に変換する方法を説明しています。 JSON文字列形式をJavaオブジェクトに変換する方法を見てみましょう。
まず、2つの文字列を異なる形式で定義する必要があります。二重引用符を使用/エスケープする必要があります。
public static void jsonstrtojava(){//異なる形式で2つの文字列を定義するstring objectstr = "{/" name/":/" json/"、/" age/":/" 24/"、/" address/":/" xicheng地区、北京/"}"; string arraysstr = "[{/" name/":/" json/"、/" age/":/" 24/"、/" address/":/" xicheng地区、北京/"}]"; // 1。 jsonobject jsonobject jsonobject = jsonobject.fromobject(objectStr)を使用します。 Student Stu =(Student)jsonobject.tobean(jsonobject、sustent.class); // 2。 jsonarray jsonarray jsonarray = jsonarray.fromobject(arraystr)を使用します。 // jsonarrayオブジェクトの最初の要素を取得o = jsonarray.get(0); jsonobject jsonobject2 = jsonobject.fromobject(o); Student Stu2 =(学生)jsonobject.tobean(jsonobject2、student.class); System.out.println( "stu:"+stu); System.out.println( "stu2:"+stu2); }印刷の結果は次のとおりです。
STU:学生[name = json、age = 24、address = xicheng地区、北京] stu2:student [name = json、age = 24、address = xicheng地区、北京]
上記のコードからわかるように、JSonObjectを使用するとJSON形式の文字列をJavaオブジェクトに簡単に変換できますが、JSonArrayを使用するのはそれほど簡単ではありません。「[]」シンボルがあるため、JsonArrayオブジェクトを取得した後、必要な学生の変形であり、JSonObjectを使用して簡単に取得します。
2。リストとJSON文字列の転送
リスト-》》JSON文字列
public static void listtojson(){desute stu = new Student(); stu.setname( "json"); Stu.Setage( "23"); Stu.setaddress( "Beijing Haidian District");リスト<Student>リスト= new ArrayList <Student>(); lists.add(stu); // 1。 jsonobject // jsonobject listobject = jsonobject.fromobject(lists)を使用します。 // 2。 jsonarray jsonarray listArray = jsonarray.fromobject(lists)を使用します。 //system.out.println("listobject: "+listobject.toString()); System.out.println( "listArray:"+listArray.toString()); }JsonObjectを使用して賭けました。コメントの前の結果を見てみましょう。
スレッド「メイン」net.sf.json.jsonexception: 'object'は配列です。代わりにjsonarrayを使用してください
例外があることを教えてください。ソースコードをチェックすることにより、FromObjectメソッドを使用するときに、最初にパラメータータイプを判断することがわかりました。ここでは、アレイリストが使用されるため、渡されたパラメーターはアレイタイプであることを伝えます。コメントの後の結果を見てみましょう。
ListArray:[{"address": "Haidian地区、北京"、「年齢 ":" 23 "、" name ":" json "}]この結果は正常です。
json文字列-》》リスト
上記の例から、リストオブジェクトは配列オブジェクトの形式にのみ変換できることがわかります。それでは、文字列から以下のリストへの変換を見てみましょう。
public static void jsontolist(){string arraystr = "[{/" name/":/" json/"、/" age/":/" 24/"、/" address/":/" beijing xicheng district/"}]"; //リストに変換<Student> List2 =(List <Student>)jsonarray.tolist(jsonarray.fromobject(arraystr)、sustent.class); for(Student stu:list2){system.out.println(stu); } // Array Student [] SS =(Student [])jsonarray.toarray(jsonarray.fromobject(arraystr)、sustent.class)に変換します。 for(学生学生:ss){system.out.println(student); }}結果を印刷し、
学生[name = json、age = 24、address = xicheng地区、北京]学生[name = json、age = 24、address = xicheng地区、北京]
文字列の形式は「[]」を使用して形式であるため、ここでJSonArrayオブジェクトが選択されています。前者は、Javaの配列、またはJavaのリストに変換されます。ここには対応するエンティティクラスがあるため、使用するときに汎用(sustent.class)のタイプが指定されるため、変換されたオブジェクトを取得できます。
3。マップとJSON文字列変換
マップ-》》 JSON文字列
public static void maptojson(){StudentStu = new Student(); stu.setname( "json"); Stu.Setage( "23"); Stu.SetAddress( "Shanghai、China"); map <string、stu> map = new hashmap <string、sustent>(); map.put( "first"、stu); // 1。 jsonobject jsonobject mapobject = jsonobject.fromobject(map); system.out.println( "mapobject"+mapobject.toString()); // 2。 jsonarray jsonarray maparray = jsonarray.fromobject(map); system.out.println( "maparray:"+maparray.toString()); }結果を印刷し、
MapObject {"First":{"address": "shanghai、" age ":" 23 "、" name ":" json "}} maparray:[{" first ":{" dresdge ":" shanghai、 "age": "23"、 "name": "json"}}}上に2つのフォームが印刷されています。
JSON文字列-》》マップ
JSON文字列は、マップオブジェクトに直接変換することはできません。マップ内のキーに対応する値を取得するには、他の方法が必要です。
public static void jsontomap(){string strobject = "{/" first/":{/" address/":/" shanghai、china/"、/" age/":/" 23/"、/" name/":/" json/"}}"; // jsonobject jsonobject jsonobject = jsonobject.fromobject(strobject);マップマップ= new Hashmap(); map.put( "first"、sustent.class); // Tobeanメソッドが使用され、MyBeanには3つのパラメーターが必要ですmy =(mybean)jsonobject.tobean(jsonobject、mybean.class、map); System.out.println(my.getFirst()); }結果を印刷し、
学生[name = json、age = 23、住所=上海、中国]
以下はMyBeanのコードです。
パッケージcom.cn.study.day4; import java.util.map; import com.cn.study.day3.student; public class mybean {private entudent first; Public Student getFirst(){最初に戻ります。 } public void setfirst(desute first){this.first = first; }} Tobean()メソッドを使用して、3つのパラメーターが渡され、1つ目はjsonObjectオブジェクト、2つ目はmybean.class、3つはマップオブジェクトです。 MyBeanを通じて、このクラスに最初の属性がなければならないことを知ることができます。そのタイプは学生であり、マップ内のキーと値のタイプ、つまり最初のキータイプに対応する値のタイプに対応しています。
上記はこの記事のすべての内容です。みんなの学習に役立つことを願っています。誰もがwulin.comをもっとサポートすることを願っています。