zoukankan      html  css  js  c++  java
  • 使用json-lib进行Java和JSON之间的转换

    学习笔记,转自:http://www.cnblogs.com/mailingfeng/archive/2012/01/18/2325707.html

     

    1. json-lib是一个java类库,提供将Java对象,包括beans, maps, collections, java arrays and XML等转换成JSON,或者反向转换的功能。

     

    2. json-lib 主页 : http://json-lib.sourceforge.net/

     

    3.执行环境

         需要以下类库支持

    • jakarta commons-lang 2.5
    • jakarta commons-beanutils 1.8.0
    • jakarta commons-collections 3.2.1
    • jakarta commons-logging 1.1.1
    • ezmorph 1.0.6

    4.功能示例

       这里通过JUnit-Case例子给出代码示例

      1 package com.mai.json;
      2 
      3 import static org.junit.Assert.assertEquals;
      4 
      5 import java.util.ArrayList;
      6 import java.util.Date;
      7 import java.util.HashMap;
      8 import java.util.Iterator;
      9 import java.util.List;
     10 import java.util.Map;
     11 import net.sf.ezmorph.Morpher;
     12 import net.sf.ezmorph.MorpherRegistry;
     13 import net.sf.ezmorph.bean.BeanMorpher;
     14 import net.sf.json.JSONArray;
     15 import net.sf.json.JSONObject;
     16 import net.sf.json.util.JSONUtils;
     17 
     18 import org.apache.commons.beanutils.PropertyUtils;
     19 import org.junit.Test;
     20 
     21 public class JsonLibTest {
     22 
     23     /*
     24      *  普通类型、List、Collection等都是用JSONArray解析
     25      *  
     26      *  Map、自定义类型是用JSONObject解析
     27      *  可以将Map理解成一个对象,里面的key/value对可以理解成对象的属性/属性值
     28      *  即{key1:value1,key2,value2......}
     29      * 
     30      * 1.JSONObject是一个name:values集合,通过它的get(key)方法取得的是key后对应的value部分(字符串)
     31      *         通过它的getJSONObject(key)可以取到一个JSONObject,--> 转换成map,
     32      *         通过它的getJSONArray(key) 可以取到一个JSONArray ,
     33      * 
     34      * 
     35      */
     36     
     37     //一般数组转换成JSON
     38     @Test
     39     public void testArrayToJSON(){
     40         boolean[] boolArray = new boolean[]{true,false,true};  
     41         JSONArray jsonArray = JSONArray.fromObject( boolArray );  
     42         System.out.println( jsonArray );  
     43         // prints [true,false,true]  
     44     }
     45     
     46     
     47     //Collection对象转换成JSON
     48     @Test
     49     public void testListToJSON(){
     50         List list = new ArrayList();  
     51         list.add( "first" );  
     52         list.add( "second" );  
     53         JSONArray jsonArray = JSONArray.fromObject( list );  
     54         System.out.println( jsonArray );  
     55         // prints ["first","second"]  
     56     }
     57     
     58     
     59     //字符串json转换成json, 根据情况是用JSONArray或JSONObject
     60     @Test
     61     public void testJsonStrToJSON(){
     62         JSONArray jsonArray = JSONArray.fromObject( "['json','is','easy']" );  
     63         System.out.println( jsonArray );  
     64         // prints ["json","is","easy"]  
     65     }
     66     
     67     
     68     //Map转换成json, 是用jsonObject
     69     @Test
     70     public void testMapToJSON(){
     71         Map map = new HashMap();  
     72         map.put( "name", "json" );  
     73         map.put( "bool", Boolean.TRUE );  
     74         map.put( "int", new Integer(1) );  
     75         map.put( "arr", new String[]{"a","b"} );  
     76         map.put( "func", "function(i){ return this.arr[i]; }" );  
     77           
     78         JSONObject jsonObject = JSONObject.fromObject( map );  
     79         System.out.println( jsonObject );  
     80     }
     81     
     82     //复合类型bean转成成json
     83     @Test
     84     public void testBeadToJSON(){
     85         MyBean bean = new MyBean();
     86         bean.setId("001");
     87         bean.setName("银行卡");
     88         bean.setDate(new Date());
     89         
     90         List cardNum = new ArrayList();
     91         cardNum.add("农行");
     92         cardNum.add("工行");
     93         cardNum.add("建行");
     94         cardNum.add(new Person("test"));
     95         
     96         bean.setCardNum(cardNum);
     97         
     98         JSONObject jsonObject = JSONObject.fromObject(bean);
     99         System.out.println(jsonObject);
    100         
    101     }
    102     
    103     //普通类型的json转换成对象
    104     @Test
    105     public void testJSONToObject() throws Exception{
    106         String json = "{name="json",bool:true,int:1,double:2.2,func:function(a){ return a; },array:[1,2]}";  
    107         JSONObject jsonObject = JSONObject.fromObject( json ); 
    108         System.out.println(jsonObject);
    109         Object bean = JSONObject.toBean( jsonObject ); 
    110         assertEquals( jsonObject.get( "name" ), PropertyUtils.getProperty( bean, "name" ) );  
    111         assertEquals( jsonObject.get( "bool" ), PropertyUtils.getProperty( bean, "bool" ) );  
    112         assertEquals( jsonObject.get( "int" ), PropertyUtils.getProperty( bean, "int" ) );  
    113         assertEquals( jsonObject.get( "double" ), PropertyUtils.getProperty( bean, "double" ) );  
    114         assertEquals( jsonObject.get( "func" ), PropertyUtils.getProperty( bean, "func" ) );  
    115         System.out.println(PropertyUtils.getProperty(bean, "name"));
    116         System.out.println(PropertyUtils.getProperty(bean, "bool"));
    117         System.out.println(PropertyUtils.getProperty(bean, "int"));
    118         System.out.println(PropertyUtils.getProperty(bean, "double"));
    119         System.out.println(PropertyUtils.getProperty(bean, "func"));
    120         System.out.println(PropertyUtils.getProperty(bean, "array"));
    121         
    122         List arrayList = (List)JSONArray.toCollection(jsonObject.getJSONArray("array"));
    123         for(Object object : arrayList){
    124             System.out.println(object);
    125         }
    126         
    127     }
    128     
    129     
    130     //将json解析成复合类型对象, 包含List
    131     @Test
    132     public void testJSONToBeanHavaList(){
    133         String json = "{list:[{name:'test1'},{name:'test2'}],map:{test1:{name:'test1'},test2:{name:'test2'}}}";
    134 //        String json = "{list:[{name:'test1'},{name:'test2'}]}";
    135         Map classMap = new HashMap();
    136         classMap.put("list", Person.class);
    137         MyBeanWithPerson diyBean = (MyBeanWithPerson)JSONObject.toBean(JSONObject.fromObject(json),MyBeanWithPerson.class , classMap);
    138         System.out.println(diyBean);
    139         
    140         List list = diyBean.getList();
    141         for(Object o : list){
    142             if(o instanceof Person){
    143                 Person p = (Person)o;
    144                 System.out.println(p.getName());
    145             }
    146         }
    147     }
    148     
    149     
    150     //将json解析成复合类型对象, 包含Map
    151     @Test
    152     public void testJSONToBeanHavaMap(){
    153         //把Map看成一个对象
    154         String json = "{list:[{name:'test1'},{name:'test2'}],map:{testOne:{name:'test1'},testTwo:{name:'test2'}}}";
    155         Map classMap = new HashMap();
    156         classMap.put("list", Person.class);
    157         classMap.put("map", Map.class);
    158         //使用暗示,直接将json解析为指定自定义对象,其中List完全解析,Map没有完全解析
    159         MyBeanWithPerson diyBean = (MyBeanWithPerson)JSONObject.toBean(JSONObject.fromObject(json),MyBeanWithPerson.class , classMap);
    160         System.out.println(diyBean);
    161         
    162         System.out.println("do the list release");
    163         List<Person> list = diyBean.getList();
    164         for(Person o : list){
    165             Person p = (Person)o;
    166             System.out.println(p.getName());
    167         }
    168         
    169         System.out.println("do the map release");
    170         
    171         //先往注册器中注册变换器,需要用到ezmorph包中的类
    172         MorpherRegistry morpherRegistry = JSONUtils.getMorpherRegistry();
    173         Morpher dynaMorpher = new BeanMorpher( Person.class,  morpherRegistry);  
    174         morpherRegistry.registerMorpher( dynaMorpher );  
    175         
    176         
    177         Map map = diyBean.getMap();
    178         /*这里的map没进行类型暗示,故按默认的,里面存的为net.sf.ezmorph.bean.MorphDynaBean类型的对象*/
    179         System.out.println(map);
    180       /*输出:
    181         {testOne=net.sf.ezmorph.bean.MorphDynaBean@f73c1[
    182           {name=test1}
    183         ], testTwo=net.sf.ezmorph.bean.MorphDynaBean@186c6b2[
    184           {name=test2}
    185         ]}
    186       */
    187         List<Person> output = new ArrayList();  
    188         for( Iterator i = map.values().iterator(); i.hasNext(); ){  
    189             //使用注册器对指定DynaBean进行对象变换
    190            output.add( (Person)morpherRegistry.morph( Person.class, i.next() ) );  
    191         }  
    192         
    193         for(Person p : output){
    194             System.out.println(p.getName());
    195         /*输出:
    196           test1
    197           test2
    198         */
    199         }
    200         
    201     }
    202     
    203     
    204     
    205 }
    206  
    207 5.下面提供上面例子所需的资源,包括jar包和代码
    208 http://files.cnblogs.com/mailingfeng/json-lib/json-lib%E7%94%A8%E4%BE%8B%E6%89%80%E9%9C%80jar%E5%8C%85%E5%92%8Cjava%E7%B1%BB.rar
  • 相关阅读:
    python unittest学习4---跳过测试与预计的失败
    vue element-ui 使用 el-scrollbar监听滚动条滚动事件,处理el-tabs滚动到顶部header吸顶效果
    vue element-ui 复制文本到粘贴板
    VS Code 在HTML中生成随机文本内容
    git 添加多个远程仓库命令
    javascript——常用基础API部分方法、面试题集合
    清明时节,css3如何将网页变成灰色
    ffmpeg合并本地/线上、破解下载m3u8格式视频并转mp4格式命令
    javascript面试题
    javascript以下几种情况转换成布尔类型会得到false
  • 原文地址:https://www.cnblogs.com/ning1121/p/3471290.html
Copyright © 2011-2022 走看看