組裝json格式報文 -- java內部類

新手參考

/**
*   舉例net.sf.json.JSONObject.fromObject(obj)生成json報文方式
*  創建請求報文對應demo類 
*/
public class UnderwritingCustomer extends CustomerBaseInfo{
    // 客戶聯繫方式節點
    private PartyContactTrans partyContact;
    public PartyContactTrans getPartyContact() {
            return partyContact;
    }
    public void setPartyContact(PartyContactTrans partyContact) {
        this.partyContact = partyContact;
    }
    /**
     * (內部類)請求報文 - 客戶聯繫方式節點
     * @author caisq
     */
    public static class PartyContactTrans {
        // 郵箱
        private String email;
        // 手機號碼
        private String mobile;
        //省略其他節點字段...
        //構造方法 - 方便初始化
        public PartyContactTrans(){}
        public PartyContactTrans(String email,String mobile){
            this.email = email;
            this.mobile = mobile;
        }
        public String getEmail() {
            return email;
        }
        public void setEmail(String email) {
            this.email = email;
        }
        public String getMobile() {
            return mobile;
        }
        public void setMobile(String mobile) {
            this.mobile = mobile;
        }
    }
}
//報文組裝
public static String marshallerJsonBody(){
    //創建對象set對應屬性值
    UnderwritingCustomer customer = new UnderwritingCustomer();
    PartyContactTrans partyContact = new PartyContactTrans();
    partyContact.setEmail("[email protected]");
    partyContact.setMobile("186163****1");
    customer.setPartyContact(partyContact);
    //objToJson
    if(customer!= null){
        return JSONObject.fromObject(obj).toString();
    }
    return "";
}

PS:
1. java內部類詳解鏈接 >>>
2. 例子比較簡單,可按示例多重拓展
2. 使用靜態內部類,不然實例化時候會報錯。
3. 對於特殊格式報文,可單獨對內部類toJson,然後合成報文體。
報文模版示例:

"customers": [
    {
        "partyId": 1,
        "person": {
            "@typeName": "PersonInputFounder",
            "certiCode": "1231411232",
            "certiType": 1,
            "certiEndDate": "9999-12-31",
        }
    },
    {
        "partyId": 2,
        "partyContact": {
            "email": "974367409@qq.com",
            "mobile": "18616318161"
        },
        "bankAccounts": [
            {
                "@typeName": "BankAccountInput",
                "bankAccount": "124241212212",
                "partyId": 2,
                "bankCode": "011"
            }
        ]
    }
]

—————————————————————加長版分割線—————————————————————————–

import net.sf.json.JSONObject;

JSONObject bodyJson = new JSONObject();
JSONObject claimantJson = new JSONObject();
claimantJson.element("claimant", claimant);
String claimantStr = claimantJson.toString().substring(12,claimantJson.toString().length()-1);
JSONObject dangerJson = new JSONObject();
dangerJson.element("danger", danger);
String dangerJsonStr = dangerJson.toString().substring(10,dangerJson.toString().length()-1);
JSONObject customersJson = new JSONObject();
customersJson.element("", "["+dangerJsonStr+","+claimantStr+"]");
bodyJson.element("extensionObject", extensionObject);
bodyJson.element("customers", "["+dangerJsonStr+","+claimantStr+"]");
String body = bodyJson.toString().replace("typeName", "@typeName");

—- end & 留言私信 —-

附個工具類代碼
`import java.io.UnsupportedEncodingException;
import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.lang.reflect.ParameterizedType;
import java.lang.reflect.Type;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.SortedMap;
import java.util.TreeMap;

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

/**
* 描述:JSON轉Object V2.0 支持List、Set、Object類型
*/
public class JSONUtils {

/**
 * 方法名稱: jsonMappedObj<br>
 * 描述:JSON 自動映射成對對象Object :
 *  屬性支持:
 *  基本類型、String、Set、List、Object 等
 * @param json
 * @return
 */
@SuppressWarnings("rawtypes")
public static <T> Object jsonToObj(String className ,String json){
    Object obj = null;
    try {
        obj = getObject(className);
        Class clzz = getInstance(className);
        JSONObject jsonObject = getJson(json);
        jsonToObj(className, jsonObject, obj, clzz);
    } catch (Exception e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    return obj ;
}

/**
 * 方法名稱: jsonMappedObj<br>
 * 描述:JSON 自動映射成對對象Object :
 *  屬性支持:
 *  基本類型、String、Set、List、Object 等
 * @param json
 * @return
 */
@SuppressWarnings("rawtypes")
public static <T> Object jsonMappedObj(Class clz ,String json){
    Object obj = null ;
    try {
        String className = clz.getName();
        obj = getObject(className);
        Class clzz = getInstance(className); 
        JSONObject jsonObject = getJson(json);
        jsonToObj(className, jsonObject, obj, clzz);
    } catch (SecurityException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    return obj ;
}

/**
 * JSON --》 Object  屬性只支持String類轉換<br>
 * @param className 類
 * @param json  json數據
 * @return <br>
 */
@SuppressWarnings("rawtypes")
public static <T> Object josnListObj(Class clz ,String json){
    Object obj = null ;
    try {

        String className = clz.getName();
        obj = getObject(className);
        Class clzz = getInstance(className); 
        JSONObject jsonObject = getJson(json);
        jsonToObj(className, jsonObject, obj, clzz);
    } catch (SecurityException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    return null ;
}

public static String objToJosn(Object obj){
    if(obj != null){
        return JSONObject.fromObject(obj).toString();
    }
    return "" ;
}

/**
 * Object - 》 XML 屬性只支持String類轉換 <br>
 * @param obj 對象
 * @return <br>
 */
@SuppressWarnings("rawtypes")
public static String froXML(Object obj){
    SortedMap<Object,Object> packageParams = new TreeMap<Object,Object>();  
    Class clzz = obj.getClass();
    for (Field f : clzz.getDeclaredFields()){
        if(f.getGenericType().toString().equals("class java.lang.String")){
            Method m =  getMethod(clzz, "get" + getMethodName(f.getName()));
            String value = getValue(m, obj);
            if(value != null){
                packageParams.put(f.getName(),  value);
            }
        }  
    }
    return objToXML(packageParams) ;
}

@SuppressWarnings("rawtypes")
public static String getSign(Object obj){
    SortedMap<Object,Object> packageParams = new TreeMap<Object,Object>();  
    Class clzz = obj.getClass();
    for (Field f : clzz.getDeclaredFields()){
        if(f.getGenericType().toString().equals("class java.lang.String")){
            Method m =  getMethod(clzz, "get" + getMethodName(f.getName()));
            String value = getValue(m, obj);
            if(value != null){
                packageParams.put(f.getName(),  value);
            }

        }  
    }
    return objToXML(packageParams) ;
}

private static String getValue(Method method ,Object obj){
    String value = null ;
    try {
        value = (String) method.invoke(obj);
    } catch (IllegalArgumentException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (IllegalAccessException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (InvocationTargetException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    return value ;
}

@SuppressWarnings({ "unchecked", "rawtypes" })
private static Method getMethod(Class clzz ,String name){
    Method method = null ;
    try {
        method = clzz.getMethod(name);
    } catch (SecurityException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (NoSuchMethodException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

    return method ;
}

private static String getMethodName(String fildeName){
      byte[] items = fildeName.getBytes();
      items[0] = (byte) ((char) items[0] - 'a' + 'A');
      return new String(items);
}

@SuppressWarnings("rawtypes")
private static Field getField(Class clzz ,String labelName){
    Field field = null ;
    try {
        field = clzz.getDeclaredField(labelName);
    } catch (SecurityException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (NoSuchFieldException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

    return field ;
}

private static JSONObject getJson(String json){
    JSONObject jsonObject = null ;
    try {
        jsonObject = JSONObject.fromObject(json) ;
    } catch (JSONException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();

    }
    return jsonObject ;
}

private static Object getObject(String className){
    Object obj = null ;
    try {
        obj = Class.forName(className).newInstance();
    } catch (InstantiationException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (IllegalAccessException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (ClassNotFoundException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    return obj ;
}

private static void analysisAttribute(Class clzz, JSONObject jsonObject, Object obj, Class zl){
    for(Field fd : getFields(zl)){
        analysisValue(getIterator(jsonObject), jsonObject, fd, obj, clzz);
    }
}

private static void analysisValue(Iterator iterator, JSONObject json, Field field, Object obj, Class clzz){
    while(iterator.hasNext()){
        String key = getKey(iterator);
        Object value = getValue(key, json);
        if(checkAttribute(field, key) && checkIsEmpty(value)){
            checkAttributeType(field, obj, clzz, key, value);
        }
    }
}

// private static void analysisValues(Iterator iterator, JSONObject json, Field field, Object obj, Class clzz){
// while(iterator.hasNext()){
// String key = getJSONArray(iterator);
// Object value = getValue(key, json);
// if(checkAttribute(field, key)){
// checkAttributeType(field, obj, clzz, key, value);
// }
// }
// }

private static void checkAttributeType(Field field, Object obj, Class clzz, String key, Object value){
    if(checkAttribute(field, key)){
        if(checkListType(field)){ 
            setTypeValue(field, obj, clzz, key, setListType(field, obj, value));
        }else if(checkSetType(field)){ 
            setTypeValue(field, obj, clzz, key, setSetType(field, obj, value));
        }else if(checkObject(field)){
            setTypeValue(field, obj, clzz, key, setObjectType(field, value));
        }else{
            setTypeValue(field, obj, clzz, key, value);
        }
    }
}

private static List setListType(Field field, Object obj, Object value){
    List list = new ArrayList();
    Iterator it = getJSONArray(value.toString()).iterator(); 
    Class<?> clz = getClassInstantiation(getParameterizedType(getType(field)));
    Field [] fs = getFields(clz);
    while(it.hasNext()){  
        Object oj = getObject(clz.getName()); 
        JSONObject jso =  (JSONObject) it.next();  
        for(Field fi : fs){ 
            Iterator ittor = jso.keys() ;
            analysisValue(ittor, jso, fi, oj, clz);
        } 
        list.add(oj); 
    } 
    return list ;
}

private static Set setSetType(Field field, Object obj, Object value){
    Set set = new HashSet();
    Class<?> clz = getClassInstantiation(getParameterizedType(getType(field)));
    Iterator it = getJSONArray(value.toString()).iterator();
    Field [] fs = getFields(clz);
    while(it.hasNext()){  
        Object oj = getObject(clz.getName()); 
        JSONObject jso =  (JSONObject) it.next();  
        for(Field fi : fs){ 
            Iterator ittor = jso.keys() ;
            analysisValue(ittor, jso, fi, oj, clz);
        } 
        set.add(oj); 
    }  
    return set ;
}

private static <T> Object setObjectType(Field field, Object value){
    Class clzz = field.getType() ;
    Object oj = getObject(clzz.getName()); 
    analysisAttribute(clzz, getJson(value.toString()), oj, clzz);
    return oj ;
}

private static Object getValue(String key, JSONObject json){
    return json.get(key);
}

private static String getKey(Iterator iterator){
     return (String) iterator.next();  
}

private static JSONObject getKeyJson(Iterator iterator){
     return (JSONObject) iterator.next();  
}

private static Iterator getIterator(JSONObject jsonObject){
    return jsonObject.keys();
}

private static void jsonToObj(String className, JSONObject jsonObject, Object obj, Class clzz){
    analysisAttribute(clzz, jsonObject, obj, getInstance(className));
}

private static Field[] getFields(Class<?> clzz){
    return clzz.getDeclaredFields();
}

private static Class<?> getClassInstantiation(ParameterizedType paraType){
    return (Class<?>)paraType.getActualTypeArguments()[0]; 
}

private static ParameterizedType getParameterizedType(Type type){
    return (ParameterizedType) type;
}

private static Type getType(Field field){
    return field.getGenericType();
}

private static JSONArray getJSONArray(String json){
    return JSONArray.fromObject(json);
}

public static void setAccessibleFlag(Field field){
    field.setAccessible(true);
}

private static void setTypeValue(Field field, Object obj, Class clzz, String key, Object value){
    if(checkAttribute(field, key)){
        try { 
            checkType(getDeclaredField(clzz, key), obj, value);
        } catch (NumberFormatException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IllegalArgumentException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IllegalAccessException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

}

private static boolean checkAttribute(Field field, String attribute){
    boolean flag = false ;
    if(field.getName().toUpperCase().equals(attribute.toUpperCase())){
        flag = true ;
    }
    return flag ;
}

public static Field getDeclaredField(Class clz, String key){
    return getField(clz, key);

}

public static void checkType(Field field, Object obj, Object value) throws NumberFormatException, IllegalArgumentException, IllegalAccessException{
    setAccessibleFlag(field);
    if(checkInt(field)){ 
        field.setInt(obj, Integer.parseInt(value.toString()));
    }else if(checkFloat(field)){
        field.setFloat(obj, Float.parseFloat(value.toString()));
    }else if(checkDouble(field)){
        field.setDouble(obj, Double.parseDouble(value.toString()));
    }else if(checkShort(field)){
        field.setShort(obj, Short.parseShort(value.toString()));
    }else if(checkLong(field)){
        field.setLong(obj, Long.parseLong(value.toString()));
    }else if(checkByte(field)){
        field.setByte(obj, Byte.parseByte(value.toString()));
    }else if(checkBoolean(field)){
        field.setBoolean(obj, Boolean.parseBoolean(value.toString()));
    }else{
        field.set(obj, value);
    }
} 

public static boolean checkInt(Field field){
    boolean flag = false ;
    if(field.getType().equals(int.class)){
        flag = true ;
    } 
    return flag ;
}

public static boolean checkFloat(Field field){
    boolean flag = false ;
    if(field.getType().equals(float.class)){
        flag = true ;
    }
    return flag ;
}

public static boolean checkDouble(Field field){
    boolean flag = false ;
    if(field.getType().equals(double.class)){
        flag = true ;
    }
    return flag ;
}

public static boolean checkLong(Field field){
    boolean flag = false ;
    if(field.getType().equals(long.class)){
        flag = true ;
    }
    return flag ;
}

public static boolean checkChar(Field field){
    boolean flag = false ;
    if(field.getType().equals(char.class)){
        flag = true ;
    }
    return flag ;
}

public static boolean checkByte(Field field){
    boolean flag = false ;
    if(field.getType().equals(byte.class)){
        flag = true ;
    }
    return flag ;
}

public static boolean checkShort(Field field){
    boolean flag = false ;
    if(field.getType().equals(short.class)){
        flag = true ;
    }
    return flag ;
}

public static boolean checkBoolean(Field field){
    boolean flag = false ;
    if(field.getType().equals(boolean.class)){
        flag = true ;
    }
    return flag ;
}

public static boolean checkListType(Field field){
    boolean flag = false ;
    if(field.getType().equals(java.util.List.class)){
        flag = true ;
    }
    return flag ;
}

public static boolean checkSetType(Field field){
    boolean flag = false ;
    if(field.getType().equals(java.util.Set.class)){
        flag = true ;
    }
    return flag ;
}

public static boolean checkDateType(Field field){
    boolean flag = false ;
    if(field.getType().equals(java.util.Date.class)){
        flag = true ;
    }
    return flag ;
}

public static boolean checkStringType(Field field){
    boolean flag = false ;
    if(field.getType().equals(String.class)){
        flag = true ;
    }
    return flag ;
}

private static boolean checkIntegerType(Field field){
    boolean flag = false ;
    if(field.getType().equals(java.lang.Integer.class)){
        flag = true ;
    }
    return flag ;
}

public static boolean checkType(Field field){
    boolean flag = false ;
    if(checkInt(field)){
        flag = true ;
    }else if(checkFloat(field)){
        flag = true ;
    }else if(checkDouble(field)){
        flag = true ;
    }else if(checkLong(field)){
        flag = true ;
    }else if(checkChar(field)){
        flag = true ;
    }else if(checkByte(field)){
        flag = true ;
    }else if(checkShort(field)){
        flag = true ;
    }else if(checkBoolean(field)){
        flag = true ;
    }else if(checkDateType(field)){
        flag = true ;
    }else if(checkStringType(field)){
        flag = true ;
    }else if(checkIntegerType(field)){
        flag = true ;
    }
    return flag ;
}

public static boolean checkObject(Field field){
    boolean flag = false ;
    if(!field.getType().toString().startsWith("java.") && !checkType(field)){
        flag = true ;
    }
    return flag ;
}

@SuppressWarnings("rawtypes")
private static void jsonListObj(String className, JSONObject jsonObject, Object obj, Class clzz){
    for (Field field : getInstance(className).getDeclaredFields()) { 
        Iterator iterator = jsonObject.keys() ;
        while(iterator.hasNext()){  
            String key = (String) iterator.next();  
            String value = jsonObject.getString(key);  
            if(field.getName().toUpperCase().equals(key.toUpperCase())){
                field = getField(clzz, key);
                field.setAccessible(true);
                try {
                    field.set(obj, value);
                } catch (IllegalArgumentException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                } catch (IllegalAccessException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }
        }
    }
}

@SuppressWarnings("rawtypes")
private static Class getInstance(String className){
    Class clzz = null ;
    try {
        clzz = Class.forName(className).newInstance().getClass();
    } catch (InstantiationException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (IllegalAccessException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (ClassNotFoundException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    return clzz ;
}

private static boolean checkIsEmpty(Object obj){
    boolean flag = false ; 
    if(obj != null && !"null".equals(obj.toString()) && !"[]".equals(obj.toString())){
        flag = true ;
    }
    return flag ;
}

 @SuppressWarnings("rawtypes")
private static String objToXML(SortedMap<Object,Object> parameters) {
     StringBuilder sb2 = new StringBuilder();
    try {
        sb2.append("<?xml version='1.0' encoding='UTF-8' ?>"+"\n"+"<Content>");
        sb2.append("\n");
        Set es = parameters.entrySet();  
        Iterator it = es.iterator();  
        while(it.hasNext()) {  
        Map.Entry entry = (Map.Entry)it.next();  
        String k = (String)entry.getKey();  
        Object v = entry.getValue(); 
        sb2.append("<" + initialUpper(k) + ">");
        if("messageType".equals(k)){
            sb2.append(v.equals("text") ? "1" : "2");
        }else{
            sb2.append(v);
        }
        sb2.append("</" + initialUpper(k) + ">");
        sb2.append("\n");
    }  
        sb2.append("</Content>");

    } catch (Exception e) {
        e.printStackTrace();
    }
    return sb2.toString() ;
}

 /**
 * GBK轉UTF-8<br>
 * @param gbk
 * @return <br>
 */
public static String gbkToUtf8(String gbk){
    String utf8 = null ;
    try { 
        utf8 = new String(new String(gbk.getBytes("UTF-8"),"ISO-8859-1").getBytes("ISO-8859-1"),"UTF-8");
    } catch (UnsupportedEncodingException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }  
    return utf8 ;
}

public static String initialUpper(String convertString){

    return convertString.substring(0, 1).toUpperCase()+convertString.substring(1, convertString.length());
}

public static String initialLower(String convertString){

    return convertString.substring(0, 1).toLowerCase()+convertString.substring(1, convertString.length());
}

}
`

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章