`
huibin
  • 浏览: 756952 次
  • 性别: Icon_minigender_1
  • 来自: 郑州
社区版块
存档分类
最新评论

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

    博客分类:
  • 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来过滤。

 

 

 

 

 

   集合转换为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());
		}

 

 

分享到:
评论

相关推荐

    基于json-lib.jar包 JSONObject-Java常用的四种用法

    `json-lib.jar`是一个流行的Java库,用于处理JSON格式的数据,它提供了丰富的API来操作JSON对象。本文将深入探讨基于`json-lib.jar`包中的`JSONObject`类的四种常用用法。 1. **创建JSONObject** 创建`JSONObject`...

    json-lib.jar

    JSON-lib.jar是Java平台上的一个库,用于处理JSON数据,特别适用于Java开发者在他们的应用程序中实现JSON的序列化和反序列化。 在Java中,处理JSON通常涉及两个主要任务:将Java对象转换为JSON字符串(序列化),...

    json-lib-2.1.jar和struts2-json-plugin-2.1.8.1.jar

    在Java世界里,`json-lib-2.1.jar` 是一个用于处理JSON的库,它提供了一系列的方法来将Java对象转换为JSON格式,以及将JSON字符串反序列化回Java对象。这个库支持多种Java类型,包括基本类型、集合、Map、自定义Java...

    json-lib-2.3.jar

    标题中提到的"json-lib-2.3.jar"是json-lib库的一个具体实现,主要包含了一系列处理JSON的类和方法。这个版本的库解决了在Java中将Java对象转换为JSON对象以及反向转换的问题,特别是对于特定数据结构如`JsonObject`...

    json-lib.jar 依赖包

    json-lib.jar 开发包及依赖包 资源--commons-beanutils-1.8.0.jar commons-collections-3.2.1.jar commons-lang-2.5.jar ezmorph-1.0.6.jar json-lib-2.3-jdk15.jar

    json-lib-2.4-jdk15.jar下载

    5. 无依赖:json-lib是一个独立的jar包,无任何第三方依赖,体积小,易于在项目中使用。 6. 高性能:json-lib的性能表现不错,可以满足大多数项目的要求,适合在Android和服务器端使用。 7. 与GWT无缝集成:js

    json-lib-2.3-jdk13.jar与相关5个jar包

    json-lib-2.4-jdk14.jar ezmorph-1.0.6.jar commons-logging.jar commons-lang-2.0.jar commons-collections.jar commons-beanutils.jar

    json-lib-2.4-jdk15.jar

    json-lib-2.4-jdk15.jar是json-lib的一个特定版本,适用于JDK 1.5环境。这个版本的库包含了一系列API和实现,使得开发人员能够无缝地在Java应用中使用JSON。它支持多种Java对象类型,包括Map、List、Set、自定义Java...

    ezmorph-1.0.6.jar和json-lib-2.2.2-jdk15.rar

    ezmorph是一个Java库,提供了对象到对象的转换功能,而json-lib是另一个库,专门用于处理JSON(JavaScript Object Notation)数据格式。 1. **ezmorph库**: - **功能**:ezmorph库主要设计用于在Java中方便地进行...

    JSON-lib包json-lib-0.8.jar和json-lib-0.9.jar包

    JSON-lib是一个Java库,用于将Java对象转换为JSON(JavaScript Object Notation)格式,以及将JSON数据转换回Java对象。这个库提供了多种方法来处理JSON数据,使得在Java应用程序中与JSON交互变得更加简单。JSON是一...

    json-lib.jar及其用的jar包

    json-lib 及其用的jar包,ezmorph-1.0.6.jar;json-lib-2.4-jdk15.jar;commons-beanutils-1.7.jar;commons-lang-2.3.jar;commons-httpclient-3.0.1.jar;morph-1.1.1.jar

    json-lib-2.2.3-jdk15.jar

    总的来说,`json-lib-2.2.3-jdk15.jar`是一个适用于Java 1.5环境的JSON处理库,它提供了一整套工具,帮助开发者在Java应用程序中方便地处理JSON数据。尽管现在有更现代的替代品如Gson、Jackson等,但在某些场景下,...

    json-lib-2.4-jdk15.jar包

    json-lib-2.4-jdk15.jar json-lib-2.4-jdk15-sources.jar json-lib-2.4-jdk15-javadoc.jar 包含文件有:json-lib-2.4-jdk15.jar json-lib-2.4-jdk15-sources.jar json-lib-2.4-jdk15-javadoc.jar

    使用json-lib-2.2.2-jdk15.jar所要用到的jar包

    json-lib-2.2.3-jdk15.jar commons-beanutils-1.7.0.jar commons-httpclient-3.1.jar commons-lang-2.3.jar commons-logging-1.1.1.jar commons-collections-3.2.1.jar ezmorph-1.0.3.jar 如果不关联这些包,则会...

    json-lib-2.4-jdk15及其依赖包

    2、json-lib-2.4-jdk15.jar依赖的jar包:commons-beanutils-1.9.3.jar,commons-collections-3.2.2.jar,commons-lang-2.6.jar,commons-logging-1.2.jar,ezmorph-1.0.6.jar; 3、上述依赖包版本不能再高了,任何一...

    json架包,包好json-lib-2.2.3-jdk13.jar,json-lib-2.4-jdk14.jar以及附带的支持包

    json架包,包好json-lib-2.2.3-jdk13.jar,json-lib-2.4-jdk14.jar以及附带的支持包ezmorph-1.0.6.jar,commons-logging.jar,commons-lang.jar等

Global site tag (gtag.js) - Google Analytics