Json-lib快速上手

简介:
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[]{ truefalsetrue}; 
                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
的异常。


本文转自 leizhimin 51CTO博客,原文链接:http://blog.51cto.com/lavasoft/251179,如需转载请自行联系原作者
相关文章
|
8月前
|
JSON 关系型数据库 MySQL
Python--json配置文件
Python--json配置文件
83 0
|
8月前
|
存储 JSON 数据格式
Python快速上手系列--JSON--入门篇
Python快速上手系列--JSON--入门篇
46 0
|
8月前
|
JSON 程序员 C++
2022-9-16-C++json库--nlohmann 学习
2022-9-16-C++json库--nlohmann 学习
157 0
|
10月前
|
JSON 数据格式
notepad++安装json插件
notepad++安装json插件
174 0
|
11月前
|
JSON JavaScript 前端开发
C++ Json工具--Jsoncpp用法简介
Json简介 JSON(JavaScript Object Notation, JS 对象简谱) 是一种轻量级的数据交换格式,可读性强,易扩展,很适合做通信协议,下面主要介绍一款C++的Json库:Jsoncpp.
675 0
|
JSON PHP 数据格式
composer.json 文件是干什么的?底层原理是什么?
composer.json 文件是干什么的?底层原理是什么?
431 0
|
XML JSON JavaScript
一文上手JSON
一文上手JSON
|
JSON 前端开发 Java
json-lib 的应用 | 学习笔记
快速学习 json-lib 的应用。
json-lib 的应用 | 学习笔记
|
存储 JSON JavaScript
json基础知识与Qt中的应用
json基础知识与Qt中的应用
163 0
json基础知识与Qt中的应用