java基礎之泛型對象與json互轉

1、引入jar包java

使用JSONObject必須引用JSON-lib.jar,同時它還依賴於其餘包json

common-lang.jar緩存

common-beanuitls.jaride

common-collections.jarpost

common-logging.jarui

ezmorph.jarthis

2、JSONObject對象使用編碼

JSON-lib包是一個java對象、xml、JSON互相轉換的包。.net

1.將Java對象轉換成 json字符串code

Person p1=new Person();

p1.setName("sunshine");

p1.setAge(26);

String jsonStr=JSONObject.fromObject(p1).toString();

2.將Java 集合轉換成 json字符串

        Person p1=new Person();p1.setName("A1");p1.setAge(26);

        Person p2=new Person();p2.setName("A2");p2.setAge(23);

        List personList=new ArrayList<Person>();

        personList.add(p1);

        personList.add(p2);

         Map personMap=new HashMap<String, Person>();

        personMap.put("p1", p1);

        personMap.put("p2", p2);

        //[{"age":26,"name":"A1"},{"age":23,"name":"A2"}]

        JSONArray.fromObject(personList).toString();

 JSONSerializer.toJSON(personList)

        //[{"p2":{"name":"A2","age":23},"p1":{"name":"A1","age":26}}]

        JSONArray.fromObject(personMap).toString();

 JSONSerializer.toJSON(personMap)

3.將json字符串轉換成動態Java對象

 String jsonStr="[{\"name\":\"A2\",\"age\":23},{\"name\":\"A1\",\"age\":26}]";

        JSONArray ja=JSONArray.fromObject(jsonStr);

        for(int i=0;i<ja.size();i++){

            JSONObject jo= ja.getJSONObject(i); //轉換成JSONObject對象

            System.out.println(jo.get("name"));

 

            Person p=(Person)JSONObject.toBean(jo,Person.class);    //轉換成JavaBean

            System.out.println(p.getName());

        }

4.解決json中字段和java類的關鍵字衝突的問題,若是你的外匯IBhttp://www.kaifx.cn/json中含有關鍵字和java的關鍵字衝突怎麼解決。加上@SerializedName("") ,加入json中有一個字段爲abstract,你的java類中確定不能有這個一個屬性,解決方法。以下:

@SerializedName(" abstract")

public String abstracttext;

把泛型對象轉成字符串放到緩存中

 public static void main(String[] args) {

        VO<UserParm> vo = new VO<UserParm>();

        UserParm user = new UserParm();

        user.setUserIdName("1111");

        user.setMobilePhoneNo("2222");

        vo.setData(user);

        //正常狀況

        //1.對象轉json str

        String str = JSONObject.toJSONString(vo);

        System.out.println(str);

        //2,json str 轉對象

        VO vojs= JSONObject.parseObject(str,VO.class);

        System.out.println(vojs);

        //泛型 不能使用強轉,無論用,報錯

        VO<UserParm> vojs2= JSONObject.parseObject(str,VO.class);

        System.out.println(vojs2);

//        System.out.println(vojs2.getData().getMobilePhoneNo());

        //泛型,正常轉換

        VO<UserParm> vojs3= JSONObject.parseObject(str,new TypeReference<VO<UserParm>>(){});

        System.out.println(vojs3.getData().getMobilePhoneNo());

    }

說明:

(1) 用的是阿里的fastjson,pom文件中增長下依賴

       <dependency>

            <groupId>com.alibaba</groupId>

            <artifactId>fastjson</artifactId>

            <version>1.2.46</version>

        </dependency>

(2)對象轉json格式str

 String str = JSONObject.toJSONString(vo);

(3)json格式str轉對象

 VO vojs= JSONObject.parseObject(str,VO.class)

(4)泛型的不同,轉換爲泛型對象UserParm的時候會報錯。

System.out.println(vojs2.getData().getMobilePhoneNo());

com.alibaba.fastjson.JSONObject cannot be cast to com.laowang.spcrud.entity.UserPar

泛型的須要使用TypeReference才行:

   VO<UserParm> vojs3= JSONObject.parseObject(str,new TypeReference<VO<UserParm>>(){});

(5)結果展現

com.laowang.spcrud.service.TestService

{"code":"0","data":{"mobilePhoneNo":"2222","userIdName":"1111"}}

com.laowang.spcrud.entity.VO@368239c8

com.laowang.spcrud.entity.VO@9e89d68

2222

Process finished with exit code 0

兩個對象類

(1)泛型類VO

package com.laowang.spcrud.entity;

import java.io.Serializable;

public class VO<T> implements Serializable {

    public static final String SUCCESS = "0";

    public static final String FAIL = "1";

    private static final long serialVersionUID = 1L;

    private String code = SUCCESS;

    private String msg;

    private T data;

    

    public static String getSUCCESS() {

        return SUCCESS;

    }

    public static String getFAIL() {

        return FAIL;

    }

    public static long getSerialVersionUID() {

        return serialVersionUID;

    }

    public String getCode() {

        return code;

    }

    public void setCode(String code) {

        this.code = code;

    }

    public String getMsg() {

        return msg;

    }

    public void setMsg(String msg) {

        this.msg = msg;

    }

    public T getData() {

        return data;

    }

    public void setData(T data) {

        this.data = data;

    }

}

(2)實體類UserParm

package com.laowang.spcrud.entity;

import java.io.Serializable;

public class UserParm implements Serializable {

    private static final long serialVersionUID = 1L;

    private String mobilePhoneNo;

    private String email;

    private String uid;

    private String userIdName;

    public static long getSerialVersionUID() {

        return serialVersionUID;

    }

    public String getMobilePhoneNo() {

        return mobilePhoneNo;

    }

    public void setMobilePhoneNo(String mobilePhoneNo) {

        this.mobilePhoneNo = mobilePhoneNo;

    }

    public String getEmail() {

        return email;

    }

    public void setEmail(String email) {

        this.email = email;

    }

    public String getUid() {

        return uid;

    }

    public void setUid(String uid) {

        this.uid = uid;

    }

    public String getUserIdName() {

        return userIdName;

    }

    public void setUserIdName(String userIdName) {

        this.userIdName = userIdName;

    }

}

java對象與json字符串互轉換

1.本例使用com.alibaba.fastjson.JSON類

2.實體對象轉換爲json字符串

public static String toJSONString(Object city) {

String jsonStr = "";

if (city != null) {

jsonStr = JSON.toJSONString(city);

}

return jsonStr;

}

3.json字符串轉換爲指定對象

public static <T> T parseObject(String text, Class<T> clazz) {

        return JSON.parseObject(text, clazz);

    }

4.實體對象示例

public class CityInfoModel implements Serializable {

private static final long serialVersionUID = 4443714978780088961L;

/** 城市名稱 */

String cityName;

/**城市面積*/

double landArea;

/**人口*/

long population;

/**生產總值*/

double gross ;

/** 行政區劃代碼 */

String areaNumber;

/** 郵政編碼 */

String postalCode;

/** 電話區號 */

String telephoneCode;

/**車牌代碼*/

String carCode;

/** 城市描述 */

String cityDescribe;

public String getCityName() {

return cityName;

}

public void setCityName(String cityName) {

this.cityName = cityName;

}

public double getLandArea() {

return landArea;

}

public void setLandArea(double landArea) {

this.landArea = landArea;

}

public long getPopulation() {

return population;

}

public void setPopulation(long population) {

this.population = population;

}

public double getGross() {

return gross;

}

public void setGross(double gross) {

this.gross = gross;

}

public String getAreaNumber() {

return areaNumber;

}

public void setAreaNumber(String areaNumber) {

this.areaNumber = areaNumber;

}

public String getPostalCode() {

return postalCode;

}

public void setPostalCode(String postalCode) {

this.postalCode = postalCode;

}

public String getTelephoneCode() {

return telephoneCode;

}

public void setTelephoneCode(String telephoneCode) {

this.telephoneCode = telephoneCode;

}

public String getCarCode() {

return carCode;

}

public void setCarCode(String carCode) {

this.carCode = carCode;

}

public String getCityDescribe() {

return cityDescribe;

}

public void setCityDescribe(String cityDescribe) {

this.cityDescribe = cityDescribe;

}

@Override

public String toString() {

 

return "CityModel [cityName=" + cityName

+",landArea=" + landArea

+",population=" + population

+",gross=" + gross

+",areaNumber=" + areaNumber

+",postalCode=" + postalCode

+",telephoneCode=" + telephoneCode

+",carCode=" + carCode

+",cityDescribe=" + cityDescribe

+"]";

}

相關文章
相關標籤/搜索