json-libに基づくJArパッケージJsonプログラム、本編では主に簡単な例を紹介します!
1.まずJson-libは、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をサポートするjarパッケージを少なくともいくつか必要とする
2.Javaコレクションタイプarrays,collectionsとJSOnArrayの変換例1:boolean[]boolArray=new boolean[]{true,false,true}; JSONArray jsonArray = JSONArray.fromObject(boolArray); System.out.println(jsonArray);出力:[true,false,true]例2:List list=new ArrayList() list.add( "first"); list.add( "second"); JSONArray jsonArray = JSONArray.fromObject( list ); System.out.println( jsonArray ); 出力:["first","second"]例3:JSOnArray jsonArray=JSOnArray.fromObject( "['json','is','easy']"); System.out.println( jsonArray ); 出力:[[json]、[is]、[easy]]
3.JavaオブジェクトタイプJavaBean,MapsとJSOnObjectの変換例1:Mapmap=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 ); 出力:{"func":function(i){return this.arr[i];}「arr」:[a],[b],[int]:1,[bool]:true,[name]:[json]例2: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];"); //getters & setters ... } JSONObject jsonObject = JSONObject.fromObject( new MyBean() ); System.out.println( jsonObject );出力:{"func 1":function(i){return this.options[i];}"func2":function(i){ return this.options[i]; },"name":"json","options":["a","f"],"pojoId":1}4. JSONデータオブジェクトフォーマット変換JAVAタイプのBeans例1(動的beanに変換):String json="{name="json",bool:true,int:1,double:2.2,func:function(a){return a;}array:[1,2]}"; JSONObject jsonObject = JSONObject.fromObject(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"));出力:junitテストは緑のバー、すなわち値が等しいことを示します.
例2(特定のbeanに変換):String json="{bool:true,integer:1,string:"json"}"; JSONObject jsonObject = JSONObject.fromObject(json); BeanA bean = (BeanA) JSONObject.toBean(jsonObject, BeanA.class); assertEquals(jsonObject.get("bool"), Boolean.valueOf(bean.isBool())); assertEquals(jsonObject.get("integer"), new Integer(bean.getInteger())); assertEquals(jsonObject.get("string"), bean.getString());注意:BeanAは、特定の関連属性のgetters&settersメソッドのjavaBean 5です.Java-Json相互変換フィルタ--javaタイプをjsonに変換するときのプロパティのフィルタリングを行います.次に、3のインスタンス1で説明します.インスタンス1:Mapmap=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]; }");
JsonConfig jsonConfig = new JsonConfig(); jsonConfig.setJsonPropertyFilter(new PropertyFilter() { public boolean apply(Object source, String name, Object value) { if (value != null && Number.class.isAssignableFrom(value.getClass())) { return true; } return false; } }); JSONObject json = JSONObject.fromObject(map, jsonConfig); System.out.println(json);出力:{"func":function(i){return this.arr[i];}「arr」:["a","b","bool":true,"name","json"}および上の出力:{"func":function(i){return this.arr[i];}「arr」:[「a」,「b」],「int」:1,「bool」:true,「name」:「json」}少なくなった:「int」:1,これが属性フィルタとして機能し,コードを見るとNumber型の値をフィルタリングしたことがわかる.
例2:前例のNumberをclass.isAssignableFrom(value.getClass()のNumberをStringに変更しますか? 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]; }");
JsonConfig jsonConfig = new JsonConfig(); jsonConfig.setJsonPropertyFilter(new PropertyFilter(){public boolean apply(Object source,String name,Object value){if(value!=null&&String.class.isAssignableFrom(value.getClass())}//ここはフィルタのキーreturn trueです. } return false; } }); JSONObject json = JSONObject.fromObject(map, jsonConfig); System.out.println(json);出力:{"arr":["a","b"],"int":1,"bool":true}//ValueのタイプがStringのものをすべてフィルタリングしました.
6.Json-Java相互変換フィルタ--5とは逆に今回--json-をjavaに変換する際の属性のフィルタリングを4の例1で実証します:例1:String json="{name="json",bool:true,int:1,double:2.2,func:function(a){return a;}array:[1,2]}"; JSONObject jsonObject = JSONObject.fromObject(json);
JsonConfig jsonConfig = new JsonConfig(); jsonConfig.setRootClass(Map.class); jsonConfig.setJavaPropertyFilter(new PropertyFilter){public boolean apply(Object source,String name,Object value){if("bool".equals(name)|"double".equals(name){//ここでフィルタリングのキーreturn true; } return false; } }); Object bean = JSONObject.toBean(jsonObject, jsonConfig); System.out.println(bean);出力:{func=function(a){return a;}int=1,name=json,array=[1,2]}同4のインスタンス1出力:{double=2.2,func=function(a){return a;}int=1,name=json,bool=true,array=[1,2]}が少なくなった:double=2.2,bool=true,nameがboolとdoubleの項目であるためフィルタリングされた.
例2:String json="{name=""json",bool:true,int:1,double:2.2,func:function(a){return a;},array:[1,2]}"; JSONObject jsonObject = JSONObject.fromObject(json); JsonConfig jsonConfig = new JsonConfig(); jsonConfig.setRootClass(Map.class); jsonConfig.setJavaPropertyFilter(new PropertyFilter() { public boolean apply(Object source, String name, Object value) { if (value != null && String.class.isAssignableFrom(value.getClass(){//ここはフィルタリングのキーreturn trueです. } return false; } }); Object bean = JSONObject.toBean(jsonObject, jsonConfig); System.out.println(bean);出力:{double=2.2,func=function(a){return a;}int=1, bool=true, array=[1, 2]}
このことから、javaがjsonに変換されてもjsonがjavaに変換されても、フィルタはnameとvalueに基づいてフィルタすることができる.
コレクションがjson文字列に変換され、json文字列がコレクションオブジェクトに変換された例
2.Javaコレクションタイプarrays,collectionsとJSOnArrayの変換例1:boolean[]boolArray=new boolean[]{true,false,true}; JSONArray jsonArray = JSONArray.fromObject(boolArray); System.out.println(jsonArray);出力:[true,false,true]例2:List list=new ArrayList() list.add( "first"); list.add( "second"); JSONArray jsonArray = JSONArray.fromObject( list ); System.out.println( jsonArray ); 出力:["first","second"]例3:JSOnArray jsonArray=JSOnArray.fromObject( "['json','is','easy']"); System.out.println( jsonArray ); 出力:[[json]、[is]、[easy]]
3.JavaオブジェクトタイプJavaBean,MapsとJSOnObjectの変換例1:Mapmap=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 ); 出力:{"func":function(i){return this.arr[i];}「arr」:[a],[b],[int]:1,[bool]:true,[name]:[json]例2: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];"); //getters & setters ... } JSONObject jsonObject = JSONObject.fromObject( new MyBean() ); System.out.println( jsonObject );出力:{"func 1":function(i){return this.options[i];}"func2":function(i){ return this.options[i]; },"name":"json","options":["a","f"],"pojoId":1}4. JSONデータオブジェクトフォーマット変換JAVAタイプのBeans例1(動的beanに変換):String json="{name="json",bool:true,int:1,double:2.2,func:function(a){return a;}array:[1,2]}"; JSONObject jsonObject = JSONObject.fromObject(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"));出力:junitテストは緑のバー、すなわち値が等しいことを示します.
例2(特定のbeanに変換):String json="{bool:true,integer:1,string:"json"}"; JSONObject jsonObject = JSONObject.fromObject(json); BeanA bean = (BeanA) JSONObject.toBean(jsonObject, BeanA.class); assertEquals(jsonObject.get("bool"), Boolean.valueOf(bean.isBool())); assertEquals(jsonObject.get("integer"), new Integer(bean.getInteger())); assertEquals(jsonObject.get("string"), bean.getString());注意:BeanAは、特定の関連属性のgetters&settersメソッドのjavaBean 5です.Java-Json相互変換フィルタ--javaタイプをjsonに変換するときのプロパティのフィルタリングを行います.次に、3のインスタンス1で説明します.インスタンス1:Mapmap=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]; }");
JsonConfig jsonConfig = new JsonConfig(); jsonConfig.setJsonPropertyFilter(new PropertyFilter() { public boolean apply(Object source, String name, Object value) { if (value != null && Number.class.isAssignableFrom(value.getClass())) { return true; } return false; } }); JSONObject json = JSONObject.fromObject(map, jsonConfig); System.out.println(json);出力:{"func":function(i){return this.arr[i];}「arr」:["a","b","bool":true,"name","json"}および上の出力:{"func":function(i){return this.arr[i];}「arr」:[「a」,「b」],「int」:1,「bool」:true,「name」:「json」}少なくなった:「int」:1,これが属性フィルタとして機能し,コードを見るとNumber型の値をフィルタリングしたことがわかる.
例2:前例のNumberをclass.isAssignableFrom(value.getClass()のNumberをStringに変更しますか? 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]; }");
JsonConfig jsonConfig = new JsonConfig(); jsonConfig.setJsonPropertyFilter(new PropertyFilter(){public boolean apply(Object source,String name,Object value){if(value!=null&&String.class.isAssignableFrom(value.getClass())}//ここはフィルタのキーreturn trueです. } return false; } }); JSONObject json = JSONObject.fromObject(map, jsonConfig); System.out.println(json);出力:{"arr":["a","b"],"int":1,"bool":true}//ValueのタイプがStringのものをすべてフィルタリングしました.
6.Json-Java相互変換フィルタ--5とは逆に今回--json-をjavaに変換する際の属性のフィルタリングを4の例1で実証します:例1:String json="{name="json",bool:true,int:1,double:2.2,func:function(a){return a;}array:[1,2]}"; JSONObject jsonObject = JSONObject.fromObject(json);
JsonConfig jsonConfig = new JsonConfig(); jsonConfig.setRootClass(Map.class); jsonConfig.setJavaPropertyFilter(new PropertyFilter){public boolean apply(Object source,String name,Object value){if("bool".equals(name)|"double".equals(name){//ここでフィルタリングのキーreturn true; } return false; } }); Object bean = JSONObject.toBean(jsonObject, jsonConfig); System.out.println(bean);出力:{func=function(a){return a;}int=1,name=json,array=[1,2]}同4のインスタンス1出力:{double=2.2,func=function(a){return a;}int=1,name=json,bool=true,array=[1,2]}が少なくなった:double=2.2,bool=true,nameがboolとdoubleの項目であるためフィルタリングされた.
例2:String json="{name=""json",bool:true,int:1,double:2.2,func:function(a){return a;},array:[1,2]}"; JSONObject jsonObject = JSONObject.fromObject(json); JsonConfig jsonConfig = new JsonConfig(); jsonConfig.setRootClass(Map.class); jsonConfig.setJavaPropertyFilter(new PropertyFilter() { public boolean apply(Object source, String name, Object value) { if (value != null && String.class.isAssignableFrom(value.getClass(){//ここはフィルタリングのキーreturn trueです. } return false; } }); Object bean = JSONObject.toBean(jsonObject, jsonConfig); System.out.println(bean);出力:{double=2.2,func=function(a){return a;}int=1, bool=true, array=[1, 2]}
このことから、javaがjsonに変換されてもjsonがjavaに変換されても、フィルタはnameとvalueに基づいてフィルタすることができる.
コレクションがjson文字列に変換され、json文字列がコレクションオブジェクトに変換された例
Vector<UserOnLineBean> userVector = new Vector<UserOnLineBean>();
for(int i=0;i<100;i++){
UserOnLineBean bean=new UserOnLineBean();
bean.setUsername("zhangsan"+i);
userVector.add(bean);
}
JSONArray jsonArray = JSONArray.fromObject( userVector );
System.out.println(jsonArray.toString());
JSONArray jsonArray2 = (JSONArray) JSONSerializer.toJSON(jsonArray.toString());
List list = (List) JSONSerializer.toJava(jsonArray);
for (Object obj : list) {
JSONObject jsonObject = JSONObject.fromObject(obj);
UserOnLineBean bean = (UserOnLineBean) JSONObject.toBean(jsonObject,
UserOnLineBean.class);
System.out.println(bean.getUsername());
}