Jsonを使う

5727 ワード

一、JSONとは?
       JSON(JavaScript Object Notation)はライト級のデータ交換形式で、読みやすく、書きやすいです.機械の解析と生産も容易です.JavaScriptに基づいて、JSONは完全独立言語のテキストフォーマットを採用しています.これらの特性はJSONを理想的なデータ交換言語にします.
 
二、JSON形式のオブジェクトと配列.
     A.JSONオブジェクト   
        {属性名1:値1、属性名2:値2、属性名3:値3…}
        例えば:{name:“张三”,age:20}
        一番外側は{}を使って、それぞれの属性の間は「、」で区切られます.名前には二重引用符を使ってもいいし、単引用符を使ってもいいし、引用符を使わなくてもいいです.
     B.JSON配列
       配列をJSON形式で記述する場合は「[]」を使い、配列メンバー間は「,」で区切られます.
       例えば:
             ['サッカー',音楽',映画']
三、サービス端末でJSON形式のデータを生成する.
      AJAXアプリケーションでは、JSON形式のデータをXMLの代わりに使用するには、サーバー上でJSON形式のデータを生成しなければなりません.もちろん、スティッチング文字列を使ってJSONデータを生成することができますが、この方法はコード量が多すぎて、エラーが発生しやすいです.このとき、JSON-libツール・バッグを使って、javaのセットまたはオブジェクトをJSON形式のデータに変換することができます.JSON-libは、Java中のJavaBean,map,collection,java配列およびXMLをJSONデータフォーマットに変換するために用いられる.
    A.配列、Collectionセット変換
   
String[] users={"zhangsan","lisi","wangwu"};
JSONArray jsArray=JSONArray.fromObject(users);
System.out.println(jsArray.toString());

List<String> list=new ArrayList<String>();
list.add("aaaa");
list.add("bbbb");
list.add("ccccc");
jsArray=JSONArray.fromObject(list);
System.out.pritln(jsArray.toString());

    :
["zhangsan","lisi","wangwu"]
["aaaa","bbbb","ccccc"]
   B.Mapセット変換
 
Map<String,Object> map=new HashMap<String,Object>();
map.put("name","  ");
map.put("favorite",new String[]{"  ","  ","  "});
map.put("getFavorite","function(i){return this.favorite[i]}");

JSONObject jsObject=JSONObject.fromObject(map);
System.out.println(jsObject.toString());

  :
{"getFavorite":function(i){return this.favorite[i]},
   "name":"  ",
   "favorite":["  ”,"  ","  "]
 }
  C.JavaBean変換
 
public class Student{
    private String name;
    private int age;
   /*setter,getter         public*/
  
}

    :
Student stu=new Student("  ",20);
JSONObject jsObject=JSONObject.fromObject(stu);
System.out.println(jsObject.toString());

  :
{"age":20 , "name":"  "}
 D.複合タイプ(一般的)
 
public class Teacher{
    private String name;
    private Set<Student> students=new HashSet<Student>();
   //       setter/getter
}
Teacher teacher=new Teacher("   ");
teacher.getStudents().add(new Student("  ",20));
teacher.getStudents().add(new Student("  ",20));
teacher.getStudents().add(new Student("  ",20));

JSONObject jsObject=JSONObject.fromObject(teacher);
System.out.println(jsObject.toString());

  :
 {"name":"   ","students":[{"age":20,"name":"  "},
                              {"age":20,"name":"  "},
                              {"age":20,"name":"  "},
                             ]
  }
 
特に注意:
  オブジェクトのある属性がDateタイプの場合、変換後のフォーマットは「{date]」:10、「day」:3、「houss」:14、「minutes」:14、「monts」:2、「seconds」:1、「time」:126820641228、「timezoneOffset」:−480、「year」:「Newme」:110
この時、beanオブジェクトの中のutil.Dateというタイプのすべての属性を一つずつ変換していることが分かります.実際の運用過程では、多くの場合、yyy-M-ddというフォーマットに転換したいです.以下はどのように実現するかを説明します.   まず、新しいタイプのJson DateValueProcessorを書きます.
 
 
public class JsonDateValueProcessor implements JsonValueProcessor {  
    private String datePattern = "yyyy-MM-dd";
    public JsonDateValueProcessor() {
        super();
    }  
    public JsonDateValueProcessor(String format) {
        super();
        this.datePattern = format;
    }   
    public Object processArrayValue(Object value, JsonConfig jsonConfig) {
        return process(value);
    }

    public Object processObjectValue(String key, Object value,
            JsonConfig jsonConfig) {
        return process(value);
    }

    
    private Object process(Object value) {
        try {
            if (value instanceof Date) {
                SimpleDateFormat sdf = new SimpleDateFormat(datePattern,
                        Locale.UK);
                return sdf.format((Date) value);
            }
            return value == null ? "" : value.toString();
        } catch (Exception e) {
            return "";
        }

    }
    public String getDatePattern() {
        return datePattern;
    }
    public void setDatePattern(String pDatePattern) {
        datePattern = pDatePattern;
    }
}
 テストコード:
 
JsonBean bean = new JsonBean();
bean.setName("NewBaby");
bean.setAge(1);
bean.setBorn(new Date());

JsonConfig jsonConfig = new JsonConfig();
jsonConfig.registerJsonValueProcessor(Date.class,new JsonDateValueProcessor());

JSONObject jo = JSONObject.fromObject(bean, jsonConfig);
System.out.println("bean->json:" + jo.toString());

    :bean->json:{"age":1,"born":"2010-03-10","name":"NewBaby"}
             。