Java中Json格式数据的应用

东坡下载 2010年10月14日 11:31:27

      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