JsonとJsonlibの使用

14224 ワード

  • Json
  • とは
    JSON(JvaScript Object Notation)(公式サイト:http://www.json.org/)は軽量レベルのデータ交換フォーマットである.読みやすく、書きやすい.また、機械の解析と生成も容易である.JavaScript Programming Language、Standard ECMA-2623 rd Edition-December 1999のサブセットに基づいている.JSONは言語から完全に独立したテキストフォーマットを採用しているが、C言語ファミリーのような習わしも使用されている慣習(C,C++,C#,Java,JavaScript,Perl,Pythonなどを含む).これらの特性はJSONを理想的なデータ交換言語にした.
  • JSONの2つの構造
  • 1.「名前/値」ペアの集合(A collection of name/value pairs).異なる言語では、オブジェクト(object)、レコード(record)、構造(struct)、辞書(dictionary)、ハッシュテーブル(hash table)、キーリスト(keyed list)、または関連配列として理解される(associative array).Java言語ではHashMapと理解できます.
    オブジェクトは無秩序な「'名前/値'ペア」コレクションです.オブジェクトは「{」(左かっこ)で始まり、「}」(右かっこ)で終わります.各「名前」の後に「:」(コロン)、「名前/値」のペア」の間に「,」(カンマ)で区切ります.
    例:var json={"name":"Jack","age":90,"Marray":true};
    Json 和 Jsonlib 的使用
    2.値にはシーケンステーブル(An ordered list of values)があります.ほとんどの言語では配列(ArrayまたはList)と理解されています.
    配列は値(value)の順序付き集合です.1つの配列は[](左中かっこ)で始まり、[](右中かっこ)で終わります.値の間には「,」(カンマ)で区切ります.
    例:var json=["Jack","Rose","Tom",89,true,false];
    Json 和 Jsonlib 的使用
  • Json-lib

  • Json-libはJavaクラスライブラリ(公式サイト:http://json-lib.sourceforge.net/)で、以下の機能を実現できます.
    変換javabeans,maps,collections,java arrays,XMLはjsonフォーマットデータとなる
    jsonフォーマットデータの変換javabeansオブジェクトJson-libに必要なjarパッケージ
    commons-beanutils-1.8.3.jar
    commons-collections-3.2.1.jar
    commons-lang-2.6.jar
    commons-logging-1.1.1.jar
    ezmorph-1.0.6.jar
    json-lib-2.4-jdk15.jar
     
  • Json-libの使用
  • 1.ArrayをJson列に解析します.JSOnArrayを使用して、Arrayタイプを解析します.
    package cn.sunzn.json;
    
    
    
    import java.util.ArrayList;
    
    import java.util.HashSet;
    
    import java.util.List;
    
    import java.util.Set;
    
    
    
    import net.sf.json.JSONArray;
    
    
    
    public class JsonLib {
    
       public static void main(String[] args) {
    
           /**
    
            *   Array     Json  
    
            */
    
           String[] str = { "Jack", "Tom", "90", "true" };
    
           JSONArray json = JSONArray.fromObject(str);
    
           System.err.println(json);
    
    
    
           /**
    
            *     ,        
    
            */
    
           Object[] o = { "  ", "  ", 89, true, 90.87 };
    
           json = JSONArray.fromObject(o);
    
           System.err.println(json);
    
    
    
           /**
    
            *      
    
            */
    
           List<String> list = new ArrayList<String>();
    
           list.add("Jack");
    
           list.add("Rose");
    
           json = JSONArray.fromObject(list);
    
           System.err.println(json);
    
    
    
           /**
    
            *    set  
    
            */
    
           Set<Object> set = new HashSet<Object>();
    
           set.add("Hello");
    
           set.add(true);
    
           set.add(99);
    
           json = JSONArray.fromObject(set);
    
           System.err.println(json);
    
       }
    
    }

    実行結果は次のとおりです.
    ["Jack","Tom","90","true"]
    
    ["  ","  ",89,true,90.87]
    
    ["Jack","Rose"]
    
    [99,true,"Hello"]

    2.JavaBean/MapをJSON列に解析します.JSOnObject解析を使用するには:
    package cn.sunzn.json;
    
    
    
    import java.util.HashMap;
    
    import java.util.Map;
    
    
    
    import net.sf.json.JSONObject;
    
    
    
    public class JsonLib {
    
       @SuppressWarnings("static-access")
    
       public static void main(String[] args) {
    
           /**
    
            *    HashMap
    
            */
    
           Map<String, Object> map = new HashMap<String, Object>();
    
           map.put("name", "Tom");
    
           map.put("age", 33);
    
           JSONObject jsonObject = JSONObject.fromObject(map);
    
           System.out.println(jsonObject);
    
    
    
           /**
    
            *    JavaBean
    
            */
    
           Person person = new Person("A001", "Jack");
    
           jsonObject = jsonObject.fromObject(person);
    
           System.out.println(jsonObject);
    
    
    
           /**
    
            *        
    
            */
    
           map.put("person", person);
    
           jsonObject = jsonObject.fromObject(map);
    
           System.out.println(jsonObject);
    
       }
    
    }

    実行結果は次のとおりです.
    {"age":33,"name":"Tom"}
    
    {"id":"A001","name":"Jack"}
    
    {"person":{"id":"A001","name":"Jack"},"age":33,"name":"Tom"}

    3.JsonConfigを使用したオーバーライド属性:JavaBean/Map用
    package cn.sunzn.json;
    
    
    
    import net.sf.json.JSONObject;
    
    import net.sf.json.JsonConfig;
    
    
    
    public class JsonLib {
    
       public static void main(String[] args) {
    
           JsonConfig config = new JsonConfig();
    
           config.setExcludes(new String[] { "name" });                      //              
    
           Person person = new Person("A001", "Jack");
    
           JSONObject jsonObject = JSONObject.fromObject(person, config);    //              
    
           System.out.println(jsonObject);
    
       }
    
    }

    実行結果は次のとおりです.実行結果では、nameプロパティがフィルタされていることがわかります.
    {"id":"A001"}

    4.Json列をArrayに変換する:
    package cn.sunzn.json;
    
    
    
    import java.util.Arrays;
    
    import net.sf.json.JSONArray;
    
    
    
    public class JsonLib {
    
       public static void main(String[] args) {
    
           JSONArray jsonArray = JSONArray.fromObject("[89,90,99]");
    
           Object array = JSONArray.toArray(jsonArray);
    
           System.out.println(array);
    
           System.out.println(Arrays.asList((Object[]) array));
    
       }
    
    }

    実行結果は次のとおりです.
    [Ljava.lang.Object;@1e5003f6
    
    [89, 90, 99]

    5.Json列をJavaBean/Mapに変換する:
    package cn.sunzn.json;
    
    
    
    import java.util.Map;
    
    
    
    import net.sf.json.JSONObject;
    
    
    
    public class JsonLib {
    
       @SuppressWarnings("unchecked")
    
       public static void main(String[] args) {
    
           /**
    
            *   Json           Map
    
            */
    
           String str = "{\"name\":\"Tom\",\"age\":90}";
    
           JSONObject jsonObject = JSONObject.fromObject(str);
    
           Map<String, Object> map = (Map<String, Object>) JSONObject.toBean(jsonObject, Map.class);
    
           System.out.println(map);
    
    
    
           /**
    
            *   Json           JavaBean
    
            */
    
           str = "{\"id\":\"A001\",\"name\":\"Jack\"}";
    
           jsonObject = JSONObject.fromObject(str);
    
           System.out.println(jsonObject);
    
           Person person = (Person) JSONObject.toBean(jsonObject, Person.class);
    
           System.out.println(person);
    
       }
    
    }

    実行結果は次のとおりです.
    {age=90, name=Tom}
    
    Person [id=A001, name=Jack]

    Json形式の文字列をJavaBeanに変換するときは、JavaBeanにパラメトリック関数の有無に注意する必要があります.そうしないと、初期化方法のエラーが次のように表示されません.
    Exception in thread "main" net.sf.json.JSONException: java.lang.NoSuchMethodException: cn.sunzn.json.Person.<init>()
    
       at net.sf.json.JSONObject.toBean(JSONObject.java:288)
    
       at net.sf.json.JSONObject.toBean(JSONObject.java:233)
    
       at cn.sunzn.json.JsonLib.main(JsonLib.java:23)
    
    Caused by: java.lang.NoSuchMethodException: cn.sunzn.json.Person.<init>()
    
       at java.lang.Class.getConstructor0(Unknown Source)
    
       at java.lang.Class.getDeclaredConstructor(Unknown Source)
    
       at net.sf.json.util.NewBeanInstanceStrategy$DefaultNewBeanInstanceStrategy.newInstance(NewBeanInstanceStrategy.java:55)
    
       at net.sf.json.JSONObject.toBean(JSONObject.java:282)
    
       ... 2 more