基于json-lib.jar包的java转换为 json对象

 

java与json对象互转

基于json-lib.jar包Json程序,本篇主要介绍一个简单的实例!

1.首先Json-lib 需要至少有下列几个jar包的支持
jakarta commons-lang 2.4 
jakarta commons-beanutils 1.7.0 
jakarta commons-collections 3.2 
jakarta commons-logging 1.1.1 
ezmorph 1.0.6


2.Java集合类型arrays,collections同JSONArray的转换

   
   
   
   
  1. 示例1: 
  2.    boolean[] boolArray = new boolean[] { truefalsetrue }; 
  3.    JSONArray jsonArray = JSONArray.fromObject(boolArray); 
  4.    System.out.println(jsonArray); 
  5. 输出:[true,false,true
   
   
   
   
  1. 示例2: 
  2.    List list = new ArrayList();    
  3.    list.add( "first" );    
  4.    list.add( "second" );    
  5.    JSONArray jsonArray = JSONArray.fromObject( list );    
  6.    System.out.println( jsonArray );  
  7. 输出:["first","second"
  8.  
  9. 示例3: 
  10.    JSONArray jsonArray = JSONArray.fromObject( "['json','is','easy']" );    
  11.    System.out.println( jsonArray );  
  12. 输出:["json","is","easy"

3.Java对象类型JavaBean,Maps同JSONObject的转换


   
   
   
   
  1. 示例1: 
  2.    Map map = new HashMap();    
  3.    map.put( "name""json" );    
  4.    map.put( "bool", Boolean.TRUE );    
  5.    map.put( "int"new Integer(1) );    
  6.    map.put( "arr"new String[]{"a","b"} );    
  7.    map.put( "func""function(i){ return this.arr[i]; }" );  
  8.    
  9.    JSONObject jsonObject = JSONObject.fromObject( map );    
  10.    System.out.println( jsonObject );  
  11. 输出:{"func":function(i){ return this.arr[i]; },"arr":["a","b"],"int":1,
  12. "bool":true,"name":"json"
  13.  
  14. 示例2: 
  15. class MyBean{    
  16.     private String name = "json";    
  17.     private int pojoId = 1;    
  18.     private char[] options = new char[]{'a','f'};    
  19.     private String func1 = "function(i){ return this.options[i]; }";    
  20.     private JSONFunction func2 = new JSONFunction(new String[]{"i"},
  21. "return this.options[i];");    
  22.     
  23.     // getters & setters    
  24.     ...    
  25. }  
  26. JSONObject jsonObject = JSONObject.fromObject( new MyBean() );    
  27. System.out.println( jsonObject );    
  28. 输出:{"func1":function(i){ return this.options[i]; },"func2":function(i){
  29.  return this.options[i]; },"name":"json","options":["a","f"],"pojoId":1


4. JSON数据对象格式转换为JAVA类型的Beans

 

   
   
   
   
  1. 示例1(转换为动态的bean): 
  2.    String json = "{name=\"json\",bool:true,int:1,double:2.2,
  3. func:function(a){ return a; },array:[1,2]}"
  4.    JSONObject jsonObject = JSONObject.fromObject(json); 
  5.    Object bean = JSONObject.toBean(jsonObject); 
  6.    assertEquals(jsonObject.get("name"), PropertyUtils.getProperty(bean, "name")); 
  7.    assertEquals(jsonObject.get("bool"), PropertyUtils.getProperty(bean, "bool")); 
  8.    assertEquals(jsonObject.get("int"), PropertyUtils.getProperty(bean, "int")); 
  9.    assertEquals(jsonObject.get("double"),PropertyUtils.getProperty(bean,"double")); 
  10.    assertEquals(jsonObject.get("func"), PropertyUtils.getProperty(bean, "func")); 
  11. 输出:junit测试显示为绿条,即值相等。 
  12. 示例2(转换为具体的bean): 
  13.    String json = "{bool:true,integer:1,string:\"json\"}"
  14.    JSONObject jsonObject = JSONObject.fromObject(json); 
  15.    BeanA bean = (BeanA) JSONObject.toBean(jsonObject, BeanA.class); 
  16.    assertEquals(jsonObject.get("bool"), Boolean.valueOf(bean.isBool())); 
  17.    assertEquals(jsonObject.get("integer"), new Integer(bean.getInteger())); 
  18.    assertEquals(jsonObject.get("string"), bean.getString()); 
  19. 注:BeanA是具体相关属性的getters & setters方法的具体javaBean 


5.Java-Json相互转换过滤器--把java类型转换为json时属性的过滤,下面我们再以3中的实例1来做个演示:
 

   
   
   
   
  1. 实例1: 
  2.    Map map = new HashMap(); 
  3.    map.put("name""json"); 
  4.    map.put("bool", Boolean.TRUE); 
  5.    map.put("int"new Integer(1)); 
  6.    map.put("arr"new String[] { "a""b" }); 
  7.    map.put("func""function(i){ return this.arr[i]; }"); 
  8.    JsonConfig jsonConfig = new JsonConfig(); 
  9.    jsonConfig.setJsonPropertyFilter(new PropertyFilter() { 
  10.     public boolean apply(Object source, String name, Object value) { 
  11.      if (value != null && Number.class.isAssignableFrom(value.getClass())) { 
  12.       return true
  13.      } 
  14.      return false
  15.     } 
  16.    }); 
  17.    JSONObject json = JSONObject.fromObject(map, jsonConfig); 
  18.    System.out.println(json); 
  19. 输出:{"func":function(i){ return this.arr[i]; },"arr":["a","b"],
  20. "bool":true,"name":"json"
  21. 和上面的输出:{"func":function(i){ return this.arr[i]; },"arr":["a","b"],"int":1,"bool":true,"name":"json"
  22. 它少了:"int":1,这段,这就是属性过滤器发挥了作用,看代码就可以知道它把值为Number型的都给过滤掉了。 
  23. 实例2: 
  24. 如果我们把上例中的Number.class.isAssignableFrom(value.getClass())中的Number改为String呢? 
  25.    Map map = new HashMap(); 
  26.    map.put("name""json"); 
  27.    map.put("bool", Boolean.TRUE); 
  28.    map.put("int"new Integer(1)); 
  29.    map.put("arr"new String[] { "a""b" }); 
  30.    map.put("func""function(i){ return this.arr[i]; }"); 
  31.    JsonConfig jsonConfig = new JsonConfig(); 
  32.    jsonConfig.setJsonPropertyFilter(new PropertyFilter() { 
  33.     public boolean apply(Object source, String name, Object value) { 
  34.      if (value != null && String.class.isAssignableFrom(value.getClass())) {
  35. //这里是过滤的关键 
  36.       return true
  37.      } 
  38.      return false
  39.     } 
  40.    }); 
  41.    JSONObject json = JSONObject.fromObject(map, jsonConfig); 
  42.    System.out.println(json); 
  43. 输出:{"arr":["a","b"],"int":1,"bool":true}
  44. //它把Value的类型为String的都给过滤掉了。 

6.Json-Java相互转换过滤器--同5相反这次--把json-转换为java时属性的过滤,下面我们以4中的实例1来做个演示:
 

   
   
   
   
  1. 实例1: 
  2.    String json = "{name=\"json\",bool:true,int:1,double:2.2,
  3. func:function(a){ return a; },array:[1,2]}"
  4.    JSONObject jsonObject = JSONObject.fromObject(json); 
  5.    JsonConfig jsonConfig = new JsonConfig(); 
  6.    jsonConfig.setRootClass(Map.class); 
  7.    jsonConfig.setJavaPropertyFilter(new PropertyFilter() { 
  8.     public boolean apply(Object source, String name, Object value) { 
  9.      if ("bool".equals(name) || "double".equals(name)) {//这里是过滤的关键 
  10.       return true
  11.      } 
  12.      return false
  13.     } 
  14.    }); 
  15.    Object bean = JSONObject.toBean(jsonObject, jsonConfig); 
  16.    System.out.println(bean); 
  17. 输出:{func=function(a){ return a; }, int=1, name=json, array=[1, 2]} 
  18. 同4中的实例1输出:{double=2.2, func=function(a){ return a; }, int=1, name=json, bool=true, array=[1, 2]} 
  19. 少了:double=2.2, bool=true,因为name为bool和double的项已经被过滤掉了。 
  20. 实例2: 
  21.    String json = "{name=\"json\",bool:true,int:1,double:2.2,func:function(a){ 
  22. return a; },array:[1,2]}"
  23.    JSONObject jsonObject = JSONObject.fromObject(json); 
  24.    JsonConfig jsonConfig = new JsonConfig(); 
  25.    jsonConfig.setRootClass(Map.class); 
  26.    jsonConfig.setJavaPropertyFilter(new PropertyFilter() { 
  27.     public boolean apply(Object source, String name, Object value) { 
  28.      if (value != null && String.class.isAssignableFrom(value.getClass())) {
  29. // 这里是过滤的关键 
  30.       return true
  31.      } 
  32.      return false
  33.     } 
  34.    }); 
  35.    Object bean = JSONObject.toBean(jsonObject, jsonConfig); 
  36.    System.out.println(bean); 
  37. 输出:{double=2.2, func=function(a){ return a; }, int=1, bool=true, array=[1, 2]} 
  38. 由此可见,无论是java转换为json还是json转换为java,过滤器都可以根据name和value来过滤。 

 

你可能感兴趣的:(json对象,java转换为)