Java <->Json

发布时间:2016-12-9 23:26:27 编辑:www.fx114.net 分享查询网我要评论
本篇文章主要介绍了"Java <->Json",主要涉及到Java <->Json方面的内容,对于Java <->Json感兴趣的同学可以参考一下。

JSON-lib这个Java类包用于把bean,map和XML转换成JSON并能够把JSON转回成bean和DynaBean。 下载地址:http://json-lib.sourceforge.net/ 还要需要的第3方包: org.apache.commons(3.2以上版本) org.apache.oro net.sf.ezmorph(ezmorph-1.0.4.jar) nu.xom 1、List Java代码 boolean[] boolArray =newboolean[]{true,false,true};                   JSONArray jsonArray1 = JSONArray.fromObject( boolArray );                  System.out.println( jsonArray1 );                  // prints [true,false,true]                                List list = new ArrayList();                  list.add( "first" );                  list.add( "second" );                  JSONArray jsonArray2 = JSONArray.fromObject( list );                  System.out.println( jsonArray2 );                  // prints ["first","second"]                    JSONArray jsonArray3 = JSONArray.fromObject( "['json','is','easy']" );                  System.out.println( jsonArray3 );                  // prints ["json","is","easy"]      2、Map Java代码 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 json = JSONObject.fromObject( map );                 System.out.println( json );                //{"func":function(i){ return this.arr[i]; },"arr":["a","b"],"int":1,"name":"json","bool":true}   3、BEAN Java代码 /**       * Bean.java          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];");     */   JSONObject jsonObject = JSONObject.fromObject( new JsonBean() );      System.out.println( jsonObject );       //{"func1":function(i){ return this.options[i]; },"pojoId":1,"name":"json","options":["a","f"],"func2":function(i){ return this.options[i]; }}     4、BEANS Java代码 /**        * private int row ;           private int col ;           private String value ;       *        */  List list = new ArrayList();             JsonBean2 jb1 = new JsonBean2();             jb1.setCol(1);             jb1.setRow(1);             jb1.setValue("xx");                          JsonBean2 jb2 = new JsonBean2();             jb2.setCol(2);             jb2.setRow(2);             jb2.setValue("");                                       list.add(jb1);              list.add(jb2);                           JSONArray ja = JSONArray.fromObject(list);              System.out.println( ja.toString() );             //[{"value":"xx","row":1,"col":1},{"value":"","row":2,"col":2}]   5、String to bean Java代码 String json = "{name=\"json\",bool:true,int:1,double:2.2,func:function(a){ return a; },array:[1,2]}";      JSONObject jsonObject = JSONObject.fromString(json);       Object bean = JSONObject.toBean( jsonObject );       assertEquals( jsonObject.get( "name" ), PropertyUtils.getProperty( bean,"name" ) );         assertEquals( jsonObject.get( "bool" ), PropertyUtils.getProperty( bean,"bool" ) );         assertEquals( jsonObject.get( "int" ), PropertyUtils.getProperty( bean,"int" ) );          assertEquals( jsonObject.get( "double" ), PropertyUtils.getProperty( bean,"double" ) );          assertEquals( jsonObject.get( "func" ), PropertyUtils.getProperty( bean,"func" ) );         List expected = JSONArray.toList( jsonObject.getJSONArray( "array" ) );         assertEquals( expected, (List) PropertyUtils.getProperty( bean, "array" ) );     Java代码 String json = "{\"value\":\"xx\",\"row\":1,\"col\":1}";      JSONObject jsonObject = JSONObject.fromString(json);       JsonBean2 bean = (JsonBean2) JSONObject.toBean( jsonObject, JsonBean2.class );          assertEquals( jsonObject.get( "col" ),new Integer( bean.getCol())   );             assertEquals( jsonObject.get( "row" ),new Integer( bean.getRow() ) );            assertEquals( jsonObject.get( "value" ), bean.getValue() );     6 json to xml 1) JSONObject json = new JSONObject( true ); String xml = XMLSerializer.write( json ); <o class="object" null="true"> 2) JSONObject json = JSONObject.fromObject("{\"name\":\"json\",\"bool\":true,\"int\":1}"); String xml = XMLSerializer.write( json ); <o class="object"> <name type="string">json</name> <bool type="boolean">true</bool> <int type="number">1</int> </o> <o class="object"> <name type="string">json</name> <bool type="boolean">true</bool> <int type="number">1</int> </o> 3) JSONArray json = JSONArray.fromObject("[1,2,3]"); String xml = XMLSerializer.write( json ); <a class="array"> <e type="number">1</e> <e type="number">2</e> <e type="number">3</e> </a> 7 、xml to json <a class="array"> <e type="function" params="i,j"> return matrix[i][j]; </e> </a> <a class="array"> <e type="function" params="i,j"> return matrix[i][j]; </e> </a> JSONArray json = (JSONArray) XMLSerializer.read( xml ); System.out.println( json ); // prints [function(i,j){ return matrix[i][j]; }] 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.5jakarta commons-beanutils 1.8.0jakarta commons-collections 3.2.1jakarta commons-logging 1.1.1ezmorph 1.0.6 4.功能示例    这里通过JUnit-Case例子给出代码示例    package com.mai.json; import static org.junit.Assert.assertEquals; import java.util.ArrayList; import java.util.Date; import java.util.HashMap; import java.util.Iterator; import java.util.List; import java.util.Map; import net.sf.ezmorph.Morpher; import net.sf.ezmorph.MorpherRegistry; import net.sf.ezmorph.bean.BeanMorpher; import net.sf.json.JSONArray; import net.sf.json.JSONObject; import net.sf.json.util.JSONUtils; import org.apache.commons.beanutils.PropertyUtils; import org.junit.Test; public class JsonLibTest {     /*      *  普通类型、List、Collection等都是用JSONArray解析      *        *  Map、自定义类型是用JSONObject解析      *  可以将Map理解成一个对象,里面的key/value对可以理解成对象的属性/属性值      *  即{key1:value1,key2,value2......}      *       * 1.JSONObject是一个name:values集合,通过它的get(key)方法取得的是key后对应的value部分(字符串)      *         通过它的getJSONObject(key)可以取到一个JSONObject,--> 转换成map,      *         通过它的getJSONArray(key) 可以取到一个JSONArray ,      *       *       */          //一般数组转换成JSON     @Test     public void testArrayToJSON(){         boolean[] boolArray = new boolean[]{true,false,true};           JSONArray jsonArray = JSONArray.fromObject( boolArray );           System.out.println( jsonArray );           // prints [true,false,true]       }               //Collection对象转换成JSON     @Test     public void testListToJSON(){         List list = new ArrayList();           list.add( "first" );           list.add( "second" );           JSONArray jsonArray = JSONArray.fromObject( list );           System.out.println( jsonArray );           // prints ["first","second"]       }               //字符串json转换成json, 根据情况是用JSONArray或JSONObject     @Test     public void testJsonStrToJSON(){         JSONArray jsonArray = JSONArray.fromObject( "['json','is','easy']" );           System.out.println( jsonArray );           // prints ["json","is","easy"]       }               //Map转换成json, 是用jsonObject     @Test     public void testMapToJSON(){         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 jsonObject = JSONObject.fromObject( map );           System.out.println( jsonObject );       }          //复合类型bean转成成json     @Test     public void testBeadToJSON(){         MyBean bean = new MyBean();         bean.setId("001");         bean.setName("银行卡");         bean.setDate(new Date());                  List cardNum = new ArrayList();         cardNum.add("农行");         cardNum.add("工行");         cardNum.add("建行");         cardNum.add(new Person("test"));                  bean.setCardNum(cardNum);                  JSONObject jsonObject = JSONObject.fromObject(bean);         System.out.println(jsonObject);              }          //普通类型的json转换成对象     @Test     public void testJSONToObject() throws Exception{         String json = "{name=\"json\",bool:true,int:1,double:2.2,func:function(a){ return a; },array:[1,2]}";           JSONObject jsonObject = JSONObject.fromObject( json );          System.out.println(jsonObject);         Object bean = JSONObject.toBean( jsonObject );          assertEquals( jsonObject.get( "name" ), PropertyUtils.getProperty( bean, "name" ) );           assertEquals( jsonObject.get( "bool" ), PropertyUtils.getProperty( bean, "bool" ) );           assertEquals( jsonObject.get( "int" ), PropertyUtils.getProperty( bean, "int" ) );           assertEquals( jsonObject.get( "double" ), PropertyUtils.getProperty( bean, "double" ) );           assertEquals( jsonObject.get( "func" ), PropertyUtils.getProperty( bean, "func" ) );           System.out.println(PropertyUtils.getProperty(bean, "name"));         System.out.println(PropertyUtils.getProperty(bean, "bool"));         System.out.println(PropertyUtils.getProperty(bean, "int"));         System.out.println(PropertyUtils.getProperty(bean, "double"));         System.out.println(PropertyUtils.getProperty(bean, "func"));         System.out.println(PropertyUtils.getProperty(bean, "array"));                  List arrayList = (List)JSONArray.toCollection(jsonObject.getJSONArray("array"));         for(Object object : arrayList){             System.out.println(object);         }              }               //将json解析成复合类型对象, 包含List     @Test     public void testJSONToBeanHavaList(){         String json = "{list:[{name:'test1'},{name:'test2'}],map:{test1:{name:'test1'},test2:{name:'test2'}}}"; //        String json = "{list:[{name:'test1'},{name:'test2'}]}";         Map classMap = new HashMap();         classMap.put("list", Person.class);         MyBeanWithPerson diyBean = (MyBeanWithPerson)JSONObject.toBean(JSONObject.fromObject(json),MyBeanWithPerson.class , classMap);         System.out.println(diyBean);                  List list = diyBean.getList();         for(Object o : list){             if(o instanceof Person){                 Person p = (Person)o;                 System.out.println(p.getName());             }         }     }               //将json解析成复合类型对象, 包含Map     @Test     public void testJSONToBeanHavaMap(){         //把Map看成一个对象         String json = "{list:[{name:'test1'},{name:'test2'}],map:{testOne:{name:'test1'},testTwo:{name:'test2'}}}";         Map classMap = new HashMap();         classMap.put("list", Person.class);         classMap.put("map", Map.class);         //使用暗示,直接将json解析为指定自定义对象,其中List完全解析,Map没有完全解析         MyBeanWithPerson diyBean = (MyBeanWithPerson)JSONObject.toBean(JSONObject.fromObject(json),MyBeanWithPerson.class , classMap);         System.out.println(diyBean);                  System.out.println("do the list release");         List<Person> list = diyBean.getList();         for(Person o : list){             Person p = (Person)o;             System.out.println(p.getName());         }                  System.out.println("do the map release");                  //先往注册器中注册变换器,需要用到ezmorph包中的类         MorpherRegistry morpherRegistry = JSONUtils.getMorpherRegistry();         Morpher dynaMorpher = new BeanMorpher( Person.class,  morpherRegistry);           morpherRegistry.registerMorpher( dynaMorpher );                             Map map = diyBean.getMap();         /*这里的map没进行类型暗示,故按默认的,里面存的为net.sf.ezmorph.bean.MorphDynaBean类型的对象*/         System.out.println(map);       /*输出:         {testOne=net.sf.ezmorph.bean.MorphDynaBea[email protected][           {name=test1}         ], [email protected][           {name=test2}         ]}       */         List<Person> output = new ArrayList();           for( Iterator i = map.values().iterator(); i.hasNext(); ){               //使用注册器对指定DynaBean进行对象变换            output.add( (Person)morpherRegistry.morph( Person.class, i.next() ) );           }                    for(Person p : output){             System.out.println(p.getName());         /*输出:           test1           test2         */         }              }                }   5.下面提供上面例子所需的资源,包括jar包和代码 /Files/mailingfeng/json-lib/json-lib用例所需jar包和java类.rar

上一篇:利用Selenium搭建Nunit测试框架
下一篇:linux驱动学习(九) usb设备驱动的初步认知

相关文章

关键词: Java <->Json

相关评论