`

使用json-lib进行Java和JSON之间的转换

    博客分类:
  • java
 
阅读更多

public class A  {
 private String a;
 private String aa;
 public String getA() {
  return a;
 }
 public void setA(String a) {
  this.a = a;
 }
 public String getAa() {
  return aa;
 }
 public void setAa(String aa) {
  this.aa = aa;
 }
}

 

public class B implements Serializable{
 private String b;
 private List<A> as;
 public String getB() {
  return b;
 }
 public void setB(String b) {
  this.b = b;
 }
 public List<A> getAs() {
  return as;
 }
 public void setAs(List<A> as) {
  this.as = as;
 }
}

 

package mytest;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

import net.sf.json.JSONArray;
import net.sf.json.JSONObject;
import net.sf.json.JsonConfig;

public class Test {
 @SuppressWarnings("unchecked")
 public static void main(String[] args) {
  //普通类型的json转换成对象
  String jso = "{'b':'is b'}"; 
        JSONObject jsonObje = JSONObject.fromObject( jso );
        B bbb = (B) JSONObject.toBean( jsonObje ,B.class);
        System.out.println("---普通类型的json转换成对象--"+bbb.getB());
  //JSONArray数据转换成java List
  String jsonArrayData="[{a:\"1\"},{a:\"2\"}]";
  JSONArray jsonArray = JSONArray.fromObject(jsonArrayData);
  List<A> ass =JSONArray.toList(jsonArray, new A(), new JsonConfig());
  for (A a2 : ass) {
   System.out.println("---JSONArray数据转换成java List--"+a2.getA());
  }
  //java List数据转换成JSONArray
  JSONArray jsonAr = JSONArray.fromObject( ass ); 
  System.out.println("-----list to json ------"+jsonAr ); 
  JSONArray json = new JSONArray();
  for (A a2 : ass) {
            JSONObject jo = new JSONObject();
            jo.put("a", a2.getA());
            json.add(jo);
        }
  System.out.println("-----list to json ------"+json.toString());
  //json转成复合类型bean
  String jstr = "{'b':'is b','as':[{'a':'is a1'},{'a':'is a2'}]}";
  JSONObject jsonObject = JSONObject.fromObject(jstr); 
        Map map = new HashMap(); 
        map.put("as", A.class);
        B b = (B) JSONObject.toBean(jsonObject, B.class, map);
        System.out.println("---json转成复合类型bean--"+b.getB());
        List<A> as =b.getAs();
        for (A a : as) {
   System.out.println("---json转成复合类型bean--"+a.getA());
  }
        //复合类型bean转成成json
        JSONObject jsonObj = JSONObject.fromObject(b);
        System.out.println("-----复合类型bean转成成json ------"+jsonObj);
 }
}

以下引用:http://blog.csdn.net/samliao_2012/article/details/7297704

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例子给出代码示例

   

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:{test1:{name:'test1'},test2:{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);
        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());
        }
        
    }
    
    
    
}

 

5.下面提供上面例子所需的资源,包括jar包和代码

/Files/mailingfeng/json-lib/json-lib用例所需jar包和java类.rar 

分享到:
评论

相关推荐

    使用json-lib将java对象转换成json字符串

    - 在进行对象到JSON转换时,可能会遇到类型不匹配、空指针等问题,需要妥善处理异常,如使用try-catch语句包裹转换代码,并进行适当的错误反馈。 通过以上步骤,我们能够理解如何使用json-lib库将Java对象转换成...

    使用json-lib实现json与Java对象的互转

    只需确保 Java 类型与 JSON 结构匹配,`json-lib` 就能正确地进行转换。 6. **处理日期和时间**: JSON 格式不直接支持日期和时间,但 `json-lib` 提供了对日期的处理,例如: ```java jsonSerializer....

    json-lib-2.4-jdk15.jar下载

    1. 简单易用:json-lib的API简单易于使用,一般只需要一行或两行代码就可以完成Java对象和JSON的相互转换。 2. 支持对象图:可以将复杂的对象层次结构与JSON相互转换,支持List、Map、数组等类型。 3. 支持注解:支持@...

    json-lib-2.4-jdk15.jar

    json-lib是一个Java库,它提供了一种方便的方式来序列化和反序列化Java对象为JSON格式,以及将JSON数据转换回Java对象。 json-lib-2.4-jdk15.jar是json-lib的一个特定版本,适用于JDK 1.5环境。这个版本的库包含了...

    json-lib应用所有jar

    5. **XML与JSON互转**:JSON-lib还提供了XML和JSON之间的转换功能,这对于那些需要在XML和JSON间切换的应用非常有用。 综上所述,JSON-lib作为一个强大的Java JSON处理库,极大地简化了JSON在Java开发中的使用。...

    json-lib-2.4和相应的依赖包

    总的来说,json-lib-2.4是Java开发中处理JSON数据的一个实用工具,尤其适用于需要在Java和JSON之间进行数据转换的项目。尽管现在有许多更新和更强大的JSON库,但json-lib-2.4的简单性和兼容性仍然使其在某些场景下...

    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.4-jdk15和全部依赖jar包

    1. **JSON转换**:`json-lib`提供了将Java对象如Map、List、自定义类等转换为JSON字符串的方法,同时也支持将JSON字符串解析为相应的Java对象。这在处理前后端交互或者存储和传输数据时非常有用。 2. **XML与JSON互...

    json-lib-2.2.3-jdk15.jar

    JSON-lib是一个Java库,它提供了将Java对象转换为JSON表示以及从JSON文本反序列化回Java对象的功能。该库名为`json-lib-2.2.3-jdk15.jar`,特别针对Java 1.5版本进行了优化。 JSON-lib的主要特点和功能包括: 1. *...

    json-lib jar和所有依赖的jar

    在文件列表中的"jsonlib需要jar包",这可能是指包含了`json-lib`库及其所有依赖的JAR文件。在实际项目中,将这些JAR文件添加到项目的类路径(classpath)中,就可以使用`json-lib`提供的功能,而无需通过Maven或其他...

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

    `json-lib-0.8.jar`是JSON-lib的0.8版本,它可能包含基础的JSON转换功能,如将Java对象转换为JSON字符串,以及反向操作,即将JSON字符串解析回Java对象。此外,它可能还支持JSON数组和JSON对象的创建、读取和修改。...

    json-lib-2.3.jar

    4. **JsonConfig**: 提供配置选项,可以定制JSON转换行为,如日期格式、null值处理等。 在实际开发中,使用json-lib进行JSON操作的步骤通常包括: 1. 导入json-lib库,如`import net.sf.json.JSONObject; import ...

    json-lib-2.2.2-jdk15.jar

    json-lib-2.2.2-jdk15.jar是JSON库的一个版本,特别针对Java 1.5(JDK 1.5)进行了优化。这个压缩包包含了json-lib库的二进制文件,用于在Android和Java平台上解析和生成JSON数据。尽管这个版本是针对JDK 1.5,但...

    json-lib-2.3-jdk15开发包和所有依赖包

    4. **XML与JSON互转**:除了基本的JSON操作,`json-lib`还提供了XML与JSON之间的转换功能,这对于需要在XML和JSON之间进行数据交换的应用非常有用。 5. **依赖包的集成**:`json-lib-2.3-jdk15`开发包包含了所有...

    json-lib-2.4-jdk15.jar及其相关依赖

    4. **XML到JSON**: `json-lib`还支持XML数据到JSON的转换,这对于在不同的数据格式之间进行转换非常有用。 `json-lib`的使用方法通常包括以下步骤: 1. **引入依赖**: 首先,你需要在项目中引入`json-lib-2.4-jdk...

    json-lib-2.3-jdk15基础jar包合辑

    这在接收到JSON格式的响应时非常有用,可以将JSON转换回对应的Java对象以便进一步处理。 3. **XML与JSON互转**:JSON Lib还提供了XML和JSON之间的转换功能,使得两种数据交换格式可以灵活切换。 4. **处理复杂结构**...

    json-lib-2.4 jar 程序文件

    `json-lib-2.4 jar`是JSON-Lib的一个版本,它是一个针对Java的开源项目,用于在Java对象和JSON数据之间进行转换。这个版本兼容JDK 15及更高版本,意味着它能够很好地运行在较新的Java环境中。这个jar包包含了一系列...

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

    3. **处理数组和集合**:JSON-Lib支持将Java的数组和集合转换为JSONArray,反之亦然。这使得在处理JSON中的数组数据时非常方便。 4. **JSONPath支持**:JSON-Lib还提供了类似XPath的JSONPath,用于查询和提取JSON...

    json-lib.jar

    在JSON-lib.jar中,还包含了处理XML与JSON转换的功能,这对于需要在XML和JSON间进行数据交换的应用程序非常有用。例如,你可以将一个XML文档转换成JSON,或者反过来,这对于数据接口或者跨平台的数据交换具有重要...

Global site tag (gtag.js) - Google Analytics