歡迎您光臨本站 註冊首頁

Json-lib快速上手

←手機掃碼閱讀     火星人 @ 2014-03-09 , reply:0

  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

  測試代碼:

  import net.sf.json.JSONArray;

  import net.sf.json.JSONObject;

  import net.sf.json.xml.XMLSerializer;

  import java.util.ArrayList;

  import java.util.HashMap;

  import java.util.List;

  import java.util.Map;

  /**

  * JSON for Java測試代碼

  *

  * @author leizhimin 2009-12-28 13:15:25

  */

  public class TestJSON {

  public static void main(String[] args) {

  test1();

  test2();

  test3();

  test4();

  test5();

  }

  /**

  * 數組或集合-->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"]

  }

  /**

  * 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}

  }

  /**

  * 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'}

  }

  /**

  * 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);

  }

  /**

  * 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);

  }

  }

  import net.sf.json.JSONFunction;

  /**

  * 測試Bean

  *

  * @author leizhimin 2009-12-28 13:55:09

  */

  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;

  }

  }

  /**

  * 測試Bean

  *

  * @author leizhimin 2009-12-28 14:18:18

  */

  public class BeanA {

  // String json2 = "{bool:true,integer:1,string:"json"}";

  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 '''

  '}';

  }

  }

  運行結果:

  ------------數組或集合-->JSON串----------

  [true,false,true]

  ["first","second"]

  ["json","is","easy"]

  ------------Object|Map-->JSON串----------

  {"func":function(i){ return this.arr[i]; },"arr":["a","b"],"int":1,"bool":true,"name":"json"}

  {"func1":function(i){ return this.options[i]; },"func2":function(i){ return this.options[i]; },"name":"json","options":["a","f"],"pojoId":1}

  ------------JSON串-->Object----------

  net.sf.ezmorph.bean.MorphDynaBean@bd0108[

  {double=2.2, func=function(a){ return a; }, int=1, name=json, bool=true, array=[1, 2]}

  ]

  BeanA{bool=true, integer=1, string='json'}

  ------------JSON串-->XML----------

  <?xml version="1.0" encoding="UTF-8"?>

  <o null="true"/>

  <?xml version="1.0" encoding="UTF-8"?>

  <o><bool type="boolean">true</bool><int type="number">1</int><name type="string">json</name></o>

  <?xml version="1.0" encoding="UTF-8"?>

  <a><e type="number">1</e><e type="number">2</e><e type="number">3</e></a>

  ------------XML-->JSON串----------

  2009-12-28 15:20:39 net.sf.json.xml.XMLSerializer getType

  信息: Using default type string

  [function(i,j){ return matrix[i][j]; }]

  Process finished with exit code 0

  特別注意:

  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

  的異常.

  另外,還有個開源的JSON庫,推薦下:

  http://code.google.com/p/google-gson/

  本文出自 「熔 岩」 博客,請務必保留此出處http://lavasoft.blog.51cto.com/62575/251179


[火星人 ] Json-lib快速上手已經有1073次圍觀

http://coctec.com/docs/java/show-post-60697.html