Json与bean的相互转换(附:xml转换)

本文使用json-lib jar包实现Json与bean的相互转换

1.将字符串转为JSON

使用JSONObject.fromObject(str)方法即可将字符串转为JSON对象

使用JSONObject.put("attribute","value")可为JSON添加属性

如果需要转为JSON数组,只需使用JSONArray对象提供的方法即可

public static void transformStringTest() {  
      String str = "{" + "\"id\":" + "\"1\"," + "\"name\":" + "\"zhangsan\""  
              + "}";  
      //1.将字符串转为JSON  
      JSONObject jsonObj = JSONObject.fromObject(str);  
      System.out.println(jsonObj.toString());  
      //JSON添加属性  
      jsonObj.put("age", "22");  
      System.out.println(jsonObj.toString());  
      //2.将对象转为数组  
      JSONArray jsonArr = JSONArray.fromObject(jsonObj);  
      System.out.println(jsonArr.toString());  
      //3.将数组添加到JSON对象中  
      JSONObject obj = new JSONObject();  
      obj.put("employees", jsonArr);  
      System.out.println(obj.toString());  
  }  
/* 输出内容 
 * {"id":"1","name":"zhangsan"}  
 * {"id":"1","name":"zhangsan","age":"22"} 
 * [{"id":"1","name":"zhangsan","age":"22"}] 
 * {"employees":[{"id":"1","name":"zhangsan","age":"22"}]} 
 */ 

2.将对象转为JSON

首先创建People类

public class People {  
    private String name;  
  
    private String idcard;  
  
    public People() {  
    }  
  
    public People(String name, String idcard) {  
        this.name = name;  
        this.idcard = idcard;  
    }  
  
    public String getName() {  
        return name;  
    }  
  
    public void setName(String name) {  
        this.name = name;  
    }  
  
    public String getIdcard() {  
        return idcard;  
    }  
  
    public void setIdcard(String idcard) {  
        this.idcard = idcard;  
    }  
  
} 

将对象转为JSON同样使用SONObject.fromObject(obj)方法

如果是一个List,转为JSON时需要使用JSONArray将对象转为JSON数组

public static void transformObjectTest() {  
        People p1 = new People("a", "111111");  
        //1.将对象转为json  
        System.out.println(JSONObject.fromObject(p1));  
        List<People> peopleList = new ArrayList<People>();  
        peopleList.add(p1);  
        //2.将list转为json(需要使用数组JSONArray)  
        JSONArray arr = JSONArray.fromObject(peopleList);  
        System.out.println(arr.toString());  
    }   

/*输出内容 
    * {"idcard":"111111","name":"a"}  
    * [{"idcard":"111111","name":"a"}] 
    */ 

3.JSON转为bean

json转为bean的方法也非常简单,只需使用JSONObject.toBean()方法即可,使用该方法的时候需要传入Bean的class

/** 
     * 将json转换为bean 
     * @param json 
     * @param type 
     * @return 
     */  
    public static <T> Object transformJsonToBean(String json, Class<T> clazz) {  
        JSONObject jsonObject = JSONObject.fromObject(json);  
        return JSONObject.toBean(jsonObject, clazz);  
    }  

4.JSON转为list<bean>集合

由于是集合,所以需要使用JSONArray,JSONArray提供了toCollection方法,使用该方法同样需要传入bean的class

public static <T> Object transformJsonToBeanList(String jsonArr,  
           Class<T> type) {  
       JSONArray jsonArray = JSONArray.fromObject(jsonArr);  
       return JSONArray.toCollection(jsonArray, type);  
   }  

5.xml相关转换

     /**  
     * 描述:json字符串转xml字符串
     */  
    public static void jsonToXML() {  
        System.out.println("json字符串转xml字符串");  
        String jsonStr = "{\"username\":\"张飞\",\"password\":\"123456\",\"age\":\"24\"}";  
        JSONObject jsonObject = JSONObject.fromObject(jsonStr);  
        XMLSerializer xmlSerializer = new XMLSerializer();  
        xmlSerializer.setRootName("user_info");  
        xmlSerializer.setTypeHintsEnabled(false);  
        String xml = xmlSerializer.write(jsonObject);  
        System.out.println("json--->xml \n" + xml);  
    }  
      
    /**  
     * 描述:xml字符串转json字符串
     */  
    public static void xmlToJSON() {  
        System.out.println("xml字符串转json字符串");  
        String xml = "<?xml version=\"1.0\" encoding=\"UTF-8\"?><user_info><password>123456</password><username>宋发元</username></user_info>";  
        XMLSerializer xmlSerializer = new XMLSerializer();  
        JSON json = xmlSerializer.read(xml);  
        System.out.println("xml--->json \n" + json.toString());  
    }  

    /**  
     * 描述:javaBean转xml字符串 
     */  
    public static void javaBeanToXML() {  
        System.out.println("javaBean转xml字符串");  
        UserInfo userInfo = new UserInfo();  
        userInfo.setUsername("songfayuan");  
        userInfo.setPassword("66666");  
        JSONObject jsonObject = JSONObject.fromObject(userInfo);  
        XMLSerializer xmlSerializer = new XMLSerializer();  
        String xml = xmlSerializer.write(jsonObject, "UTF-8");  
        System.out.println("javaBean--->xml \n" + xml);  
    }
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,332评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,508评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,812评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,607评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,728评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,919评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,071评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,802评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,256评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,576评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,712评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,389评论 4 332
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,032评论 3 316
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,798评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,026评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,473评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,606评论 2 350

推荐阅读更多精彩内容