在使用jquery的时候接触到json这种格式,在网上查了下,讲解都不是很好,自己就总结了一下,总结结果如下

     JSON是一种很简洁很重要的数据格式,通常用来交换传输数据,广泛使用于JavaScript技术中,并逐渐在各种流行编程语言中火了起来。在Java中也有一个JSON的库,用来重要作用就是Java对象与JSON、XML数据的相互转换,有着重要的应用。

     开源的JSON库主页:http://json-lib.sourceforge.net/

     环境:JDK5 , json-lib-2.3-jdk15

   所依赖的包:json-lib-2.3-jdk15.jar,commons-collections.jar,commons-lang.jar,commons-logging.jar,commons-beanutils.jar,ezmorph-1.0.6.jar,xom-1.1.jar

    java中各种类型所对应的json格式:

1.数组或集合-->JSON串

public static void test1() {
  System.out.println("------------数组或集合-->JSON串----------");
  boolean[] boolArray = new boolean[]{true, false, true};
  JSONArray jsonArray1 = JSONArray.fromObject(boolArray);
  System.out.println(jsonArray1);
  //输出格式: [true,false,true]
  List list = new ArrayList();
  list.add("first");
  list.add("second");
  JSONArray jsonArray2 = JSONArray.fromObject(list);
  System.out.println(jsonArray2);
  //输出格式: ["first","second"]
  JSONArray jsonArray3 = JSONArray.fromObject("['json','is','easy']");
      System.out.println(jsonArray3);
  //输出格式: ["json","is","easy"]
  }

2.Object|Map-->JSON串

public static void test2() {
  System.out.println("------------Object|Map-->JSON串----------");
  Map map = new HashMap();
  map.put("name", "json");
  map.put("bool", Boolean.TRUE);
  map.put("int", new Integer(1));
  map.put("arr", new String[]{"a", "b"});
  map.put("func", "function(i){ return this.arr[i]; }");
  JSONObject jsonObject1 = JSONObject.fromObject(map);
  System.out.println(jsonObject1);
  //输出格式: {"func":function(i){ return this.arr[i]; },"arr":["a","b"],"int":1,"bool":true,"name":"json"}
  JSONObject jsonObject2 = JSONObject.fromObject(new MyBean());
  System.out.println(jsonObject2);
  //输出格式: {"func1":function(i){ return this.options[i]; },"func2":function(i){ return this.options[i]; },"name":"json","options":["a","f"],"pojoId":1}
  }
 
      public class MyBean {
          private String name = "json";
          private int pojoId = 1;
          private char[] options = new char[]{'a', 'f'};
          private String func1 = "function(i){ return this.options[i]; }";
          private JSONFunction func2 = new JSONFunction(new String[]{"i"}, "return this.options[i];");
          public String getName() {
                 return name;
          }
          public void setName(String name) {
                this.name = name;
          }
           public int getPojoId() {
                 return pojoId;
           }
           public void setPojoId(int pojoId) {
                 this.pojoId = pojoId;
           }
           public char[] getOptions() {
                 return options;
           }
           public void setOptions(char[] options) {
                  this.options = options;
          }
           public String getFunc1() {
                  return func1;
          }
               public void setFunc1(String func1) {
                   this.func1 = func1;
           }
            public JSONFunction getFunc2() {
                     return func2;
           }
            public void setFunc2(JSONFunction func2) {
                      this.func2 = func2;
           }
  }

3.JSON串-->Object

public static void test3() {
  System.out.println("------------JSON串-->Object----------");
  String json1 = "{name=/"json/",bool:true,int:1,double:2.2,func:function(a){ return a; },array:[1,2]}";
  JSONObject jsonObject1 = JSONObject.fromObject(json1);
  Object bean1 = JSONObject.toBean(jsonObject1);
  System.out.println(bean1);
  //net.sf.ezmorph.bean.MorphDynaBean@10dd1f7[
  //    {double=2.2, func=function(a){ return a; }, int=1, name=json, bool=true, array=[1, 2]}
  //]
  String json2 = "{bool:true,integer:1,string:/"json/"}";
  JSONObject jsonObject2 = JSONObject.fromObject(json2);
  BeanA bean2 = (BeanA) JSONObject.toBean(jsonObject2, BeanA.class);
  System.out.println(bean2);
  // BeanA{bool=true, integer=1, string='json'}
  }
      
      public class BeanA {
          private boolean bool;
    private Integer integer;
       private String string;
      public boolean isBool() {
              return bool;
       }
       public void setBool(boolean bool) {
             this.bool = bool;
       }
       public Integer getInteger() {
              return integer;
       }
       public void setInteger(Integer integer) {
              this.integer = integer;
        }
       public String getString() {
              return string;
       }
        public void setString(String string) {
              this.string = string;
         }
  @Override
        public String toString() {
              return "BeanA{"bool=" + bool +", integer=" + integer +", string='" + string + '/'' +"}";
         }
  }

4.JSON串-->XML

public static void test4() {
  System.out.println("------------JSON串-->XML----------");
  JSONObject json = new JSONObject(true);
  String xml = new XMLSerializer().write(json);
  System.out.println(xml);
  JSONObject json1 = JSONObject.fromObject("{/"name/":/"json/",/"bool/":true,/"int/":1}");
  String xml1 = new XMLSerializer().write(json1);
  System.out.println(xml1);
  JSONArray json2 = JSONArray.fromObject("[1,2,3]");
  String xml2 = new XMLSerializer().write(json2);
  System.out.println(xml2);
  }

5.XML-->JSON串

public static void test5() {
  System.out.println("------------XML-->JSON串----------");
  String xml = "" +
  "<a class=/"array/">/n" +
  "    <e type=/"function/" params=/"i,j/">/n" +
  "            return matrix[i][j];/n" +
  "    </e>/n" +
  "</a>";
  JSONArray json = (JSONArray) new XMLSerializer().read(xml);
  System.out.println(json);
  }

特别注意:

  1、所有的Bean都应该定义为public,否则会出现net.sf.json.JSONException: java.lang.NoSuchMethodException: Property '***' has no getter method的错误。

  2、必须引入xom-1.1.jar包,否则抛出java.lang.NoClassDefFoundError: nu/xom/Serializer