`
liyueling
  • 浏览: 80662 次
  • 性别: Icon_minigender_1
  • 来自: 西安
社区版块
存档分类
最新评论

JSON-lib.jart包介绍

阅读更多

基于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:
   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:
   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 );
输出:{"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 );  
输出:{"func1":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:
   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 && 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来过滤。

分享到:
评论

相关推荐

    tomcat-juli.jar

    tomcat-juli.jart

    selenium及依赖jar包(java)

    【Selenium及依赖jar包(Java)】是一个用于自动化浏览器操作的开源工具,它在Java环境中广泛使用。Selenium的核心功能在于模拟用户的行为,比如点击、输入、滚动、选择等,使得开发者能够对Web应用程序进行自动化...

    商业贸易行业-全球观察之雅诗兰黛集团:营收增速创20年来该季度新高,护肤品类和亚太区增长强劲-200220.pdf

    雅诗兰黛集团完成对韩国品牌Dr.Jart+的收购,并预计此次收购将为全年销售额贡献1%的增长。这说明通过并购策略,雅诗兰黛集团不仅能够扩大市场份额,还能通过整合不同品牌资源,实现业务的多元化。 第五,针对中国...

    Python-用Python打印图像颜色和有风格的文本到终端

    在Python编程中,将图像的颜色和风格化的文本输出到终端是一项有趣的挑战,因为终端通常只能显示文本,而不能直接处理...同时,`jart-fabulous-19903cf`可能代表一个项目,其源代码可能包含了实现这些功能的详细步骤。

    JART XML Framework:基于JAVA的XML应用程序框架-开源

    **JART XML Framework:基于JAVA的XML应用程序框架详解** JART XML Framework,全称为Java Application and Resource Toolkit,是一个专门用于构建基于XML的Web应用程序的开源框架。它利用JAVA语言的强大功能,结合...

    2021卸妆趋势白皮书.rar

    国际知名品牌如L'Oréal、Estée Lauder、Clinique等不断推出新产品,同时,新兴品牌如Dr.Jart+、COSRX等凭借独特的产品定位和营销策略,也在市场中占得一席之地。 五、未来展望 1. 健康与美容结合:未来的卸妆...

    护肤品牌事件营销整合营销策划方案.ppt

    【市场分析】素颜霜的流行源于韩国,如Dr.Jart+维生素活颜亮白霜、3CE牛奶面霜、芭妮兰梦幻婚礼素颜霜和珂莱欧蜗牛素颜霜等品牌,它们的成功在于独特的包装设计和有效的产品配方,尤其是含有二氧化钛这一物理美白...

    Redis 上的朴素贝叶斯文本分类器.zip

    安装来自文件夹sudo python setup.py install来自奶酪店sudo pip install redisbayes来自 gitsudo pip install git+git://github.com/jart/redisbayes.git基本用法import redis, redisbayesrb = redisbayes....

    simplebayes:基于内存的可选持久性朴素贝叶斯文本分类器

    This work is heavily inspired by the python "redisbayes" module found here:[https://github.com/jart/redisbayes] and [https://pypi.python.org/pypi/redisbayes]I've elected to write this to alleviate ...

Global site tag (gtag.js) - Google Analytics