1. 程式人生 > >entity pojo vo 轉換為 string 或 json

entity pojo vo 轉換為 string 或 json

如題  

entity  pojo  vo  轉換為  string 或 json

這個是我在程式碼中 要 記錄 日誌  ,  我們 用的是hibernate 所以 關聯 的表  巢狀的表 和多  ,層次 也很深 。

用 其他的 一些 轉換 成 string  的 方法 、類, 有時 會出現  死迴圈 。  由此  寫 這個 類。

好了 , 不說了  ,直接程式碼。

工具類

package com.ly.utils;

import java.lang.reflect.Array;
import java.lang.reflect.Field;
import java.util.HashMap;
import java.util.Map;

/**
* @ClassName: EntityToString
* @Description: entity  pojo  vo  轉換為  string  
* @author linyan
* @date 2017年9月22日 上午11:08:32
*
*/
public class EntityToString {

	//定義基本型別
	static Map<Class<?>, Object> classes = new HashMap<Class<?>, Object>();
	//定義超過此長度擷取
	static Integer subStrLength = 200;
	
	static{
		classes.put(byte.class, "");
		classes.put(short.class, "");
		classes.put(int.class, "");
		classes.put(long.class, "");
		classes.put(float.class, "");
		classes.put(double.class, "");
		classes.put(char.class, "");
		classes.put(boolean.class, "");
		classes.put(Byte.class, "");
		classes.put(Short.class, "");
		classes.put(Integer.class, "");
		classes.put(Long.class, "");
		classes.put(Float.class, "");
		classes.put(Double.class, "");
		classes.put(Character.class, "");
		classes.put(Boolean.class, "");
		classes.put(String.class, "");
	}
	
	/**
	 * @Title: getString
	 * @author: linyan
	 * @Description: 
	 * @param o  需要轉換的物件
	 * @return
	 */
	public static String getString(Object o) {
		return getString(o,1);
	}
	
	/**
	 * @Title: getString
	 * @author: linyan
	 * @Description: 
	 * @param o  需要轉換的物件
	 * @param endLeve  結束 等級 
	 * @return
	 */
	public static String getString(Object o,Integer endLeve ) {
		return getString(o,0,endLeve);
	}
	
	/**
	 * @Title: getString
	 * @author: linyan
	 * @Description: 
	 * @param o		需要轉換的物件
	 * @param leve	等級
	 * @param endLeve  結束 等級 
	 * @return
	 */
	public static String getString(Object o,Integer leve,Integer endLeve )    
    {    
		Integer lev = leve + 1;
		Class<?> c = o.getClass();
        String result = "";
        if (leve==0) {
			result+=c.getSimpleName();
		}
		result+= "{";
        // 獲取類中的所有定義欄位
        Field[] fields = c.getDeclaredFields();    
        //迴圈遍歷欄位,獲取欄位對應的值
        for (Field field : fields)
        {    
            // 如果不為空,設定可見性(也就是設定私有變數可以訪問),然後返回    
            field.setAccessible(true);    
            try
            {
            	//有值
            	if(field.get(o) != null){
            		Class<?> fieldClass = field.get(o).getClass();
            		//如果是基本型別 直接 取值   用get直接取
            		if(classes.containsKey(fieldClass)){
            			result += field.getName() + "=" + subStr(field.get(o)) +",";   
            		}else if(field.get( o ) instanceof Iterable ){  // 迭代器  型別的 
            			result += field.getName()+ " = ";
            			result += iterableClass(field.get( o ),leve,endLeve);
            		}else if(field.get( o ) instanceof Map){ //  Map  型別的 
            			result += field.getName( )+ " =  ";
            			result += mapClass(field.get(o), leve, endLeve);
					}else if(fieldClass.isArray()){			// 陣列型別
						Object object = field.get(o);
						result += field.getName()+ " = ";
						result += arrayClass(object, leve, endLeve);
					}else { // 其他  型別的 
						/*這個判斷是我 自己加的  只對  我現在的專案   有用 
							判斷 欄位值 的   包名  中 是否 有 entity   並且    現在的層級 不能  大於 結束 層級
							如果有  就是 自己寫的類  那麼欄位的 值 也 要 生成 為 string 型別
						*/
            			if (fieldClass.getCanonicalName().indexOf("entity")>-1&&leve!=endLeve) {
        	                result += field.getName() + "=" + getString(field.get(o),lev,endLeve) +",";    
        				}else { // 這個就是真正的 其他型別了   如  file  等
        	                result += field.getName() + "=" + field.get(o) +",";    
        				}
					}
            	}else {
            		//沒有值
            		result += field.getName() + "=" + field.get(o) +",";
				}
            }
            catch (Exception e)
            {
                e.printStackTrace();
            }
        }
        //去除 最後一個 , 
        if(result.indexOf(",")>=0) result = result.substring(0 , result.length()-1);
        
        return result+"}";    
    }
	
	/**
	 * @Title: iterableClass
	 * @author: linyan
	 * @Description: 迭代器 型別
	 * @param obj
	 * @param leve
	 * @param endLeve
	 * @return
	 */
	public static String iterableClass(Object obj,Integer leve,Integer endLeve){
		String result = "[";
		Iterable<?> ite = (Iterable<?>)obj;
		for (Object object : ite) {
			if(object != null){
				if (classes.containsKey(object.getClass())) {
					result += subStr(object) +",";
				}else if(object instanceof Iterable){
					result += iterableClass(object,leve,endLeve);
				}else if(object instanceof Map){
					result += mapClass(object, leve, endLeve);
				}else if(object.getClass().isArray()){
					result += arrayClass(object, leve, endLeve);
				}else {
					result += elseClass(object,leve,endLeve);
				}
			}else{
				result += null;
			}
		}
		if(result.indexOf( "," )>=0) result = result.substring( 0 , result.length()-1 );
		result += "],";
		return result;
	}
	
	/**
	 * @Title: mapClass
	 * @author: linyan
	 * @Description:  Map 型別
	 * @param obj
	 * @param leve
	 * @param endLeve
	 * @return
	 */
	public static String mapClass(Object obj,Integer leve,Integer endLeve){
		String result = "{";
		Map<?,?> map1 = (Map<?,?>)obj;
		for (Map.Entry<?, ?> entry1 : map1.entrySet()) {
			if (entry1.getValue() != null) {
				if (classes.containsKey(entry1.getValue().getClass())) {
					result += entry1.getKey()+"="+  subStr(entry1.getValue())  +",";    
				}else if(entry1.getValue() instanceof Iterable){
					result += entry1.getKey()+ "=" + iterableClass(entry1.getValue(),leve,endLeve);
				}else if(entry1.getValue() instanceof Map){
					result +=  entry1.getKey()+ "=" + mapClass(entry1.getValue(),leve,endLeve);
				}else if(obj.getClass().isArray()){
					result +=  entry1.getKey()+ "=" + arrayClass(entry1.getValue(), leve, endLeve);
				}else {
					result += entry1.getKey()+ "=" + elseClass(entry1.getValue(),leve,endLeve);
				}
			}else{
				result += null;
			}
		}
		if(result.indexOf( "," )>=0) result = result.substring( 0 , result.length()-1 );
		result += "},";
		return result;
	}
	
	/**
	 * @Title: arrayClass
	 * @author: linyan
	 * @Description:  陣列 型別
	 * @param object
	 * @param leve
	 * @param endLeve
	 * @return
	 */
	public static String arrayClass(Object object,Integer leve,Integer endLeve){
		String result = "[";
		int length = Array.getLength(object) ;
		for (int i = 0; i < length; i++) {
			Object object2 = Array.get(object,i);
			if (object2!=null) {
				if (classes.containsKey(object2.getClass())) {
					result += subStr(object2)+",";
				}else if(object2 instanceof Iterable){
					result += iterableClass(object2,leve,endLeve);
				}else if (object2 instanceof Map) {
					result += mapClass(object2, leve, endLeve);
				}else if (object2.getClass().isArray()) {
					result += arrayClass(object2, leve, endLeve);
				}else {
					result += elseClass(object2,leve,endLeve);
				}
			}else{
				result += null;
			}
		}
		if(result.indexOf( "," )>=0) result = result.substring( 0 , result.length()-1 );
		result += "],";
		return result;
	}
	
	/**
	 * @Title: elseClass
	 * @author: linyan
	 * @Description: 其他型別
	 * @param object
	 * @param leve
	 * @param endLeve
	 * @return
	 */
	public static String elseClass(Object object,Integer leve,Integer endLeve){
		String result = "";
		Integer le = leve + 1;
		if (object.getClass().getCanonicalName().indexOf("entity")>-1&&leve!=endLeve) {
    		// 設定欄位可見,即可用get方法獲取屬性值。    
            result += getString(object,le,endLeve) +",";    
		}else {
			// 設定欄位可見,即可用get方法獲取屬性值。    
			result += object+",";
		}
		return result;
	}
	
	
	/**
	 * @Title: subStr
	 * @author: linyan
	 * @Description: 擷取字串
	 * @param object
	 * @return
	 */
	public static String subStr(Object object){
		if (object!=null) {
			if (object.toString().length()>subStrLength) {
				return object.toString().substring(0, subStrLength);
			}else{
				return object.toString();
			}
		}else{
			return "";
		}
	}
	
	
	
}


測試類1

package entity;

import java.io.File;
import java.util.List;
import java.util.Map;
import java.util.Set;

/**
* @ClassName: Test1
* @Description: 
* @author linyan
* @date 2017年9月26日 上午10:40:46
*
*/
public class Test1 {

	private  String  abc;
	
	private  Integer inte;
	
	private  boolean bool;
	
	private  char  ch;
	
	private  double dou;
	
	private  long lo;

	private  Map<String,Object> map;
	
	private  List<String>  list;
	
	private  Set<Test2> set;
	
	private  String[] strs;
	
	private  File file;
	
	private  Test2 test2;

	public String getAbc() {
		return abc;
	}

	public void setAbc(String abc) {
		this.abc = abc;
	}

	public Integer getInte() {
		return inte;
	}

	public void setInte(Integer inte) {
		this.inte = inte;
	}

	public boolean isBool() {
		return bool;
	}

	public void setBool(boolean bool) {
		this.bool = bool;
	}

	public char getCh() {
		return ch;
	}

	public void setCh(char ch) {
		this.ch = ch;
	}

	public double getDou() {
		return dou;
	}

	public void setDou(double dou) {
		this.dou = dou;
	}

	public long getLo() {
		return lo;
	}

	public void setLo(long lo) {
		this.lo = lo;
	}

	public Map<String, Object> getMap() {
		return map;
	}

	public void setMap(Map<String, Object> map) {
		this.map = map;
	}

	public List<String> getList() {
		return list;
	}

	public void setList(List<String> list) {
		this.list = list;
	}

	public Set<Test2> getSet() {
		return set;
	}

	public void setSet(Set<Test2> set) {
		this.set = set;
	}

	public String[] getStrs() {
		return strs;
	}

	public void setStrs(String[] strs) {
		this.strs = strs;
	}

	public File getFile() {
		return file;
	}

	public void setFile(File file) {
		this.file = file;
	}

	public Test2 getTest2() {
		return test2;
	}

	public void setTest2(Test2 test2) {
		this.test2 = test2;
	}
	
}


測試類2

package entity;

/**
* @ClassName: Test2
* @Description: 
* @author linyan
* @date 2017年9月26日 上午10:40:53
*
*/
public class Test2 {

	private String a;
	
	private Test1 test1;

	public String getA() {
		return a;
	}

	public void setA(String a) {
		this.a = a;
	}

	public Test1 getTest1() {
		return test1;
	}

	public void setTest1(Test1 test1) {
		this.test1 = test1;
	}
	
}
main 方法 
public static void main(String[] args) {
		Map<String, Object> map = new HashMap<String, Object>();
		map.put("name", "gas;ldkf");
		map.put("ex", 45);
		File file = new File("d:/test.txt");
		List<String> list = new ArrayList<String>();
		list.add("a");
		list.add("b");
		list.add("c");
		String[] strs = new String[3];
		strs = list.toArray(strs);
		Test1 test1 = new Test1();
		test1.setAbc("agcsgdb");
		test1.setBool(false);
		test1.setCh('o');
		test1.setDou(5465.15);
		test1.setFile(file);
		test1.setInte(123456);
		test1.setList(list);
		test1.setLo(987654L);
		test1.setMap(map);
		test1.setStrs(strs);
		Test2 test2 = new Test2();
		test2.setA("aaaaaaaaaaaa");
		test2.setTest1(test1);
		test1.setTest2(test2);
		Set<Test2> set = new HashSet<Test2>();
		set.add(test2);
		Test2 test22 = new Test2();
		test22.setA("bbbbbbbbbbb");
		test22.setTest1(test1);
		set.add(test22);
		test1.setSet(set);
		String entityToString = EntityToString.getString(test1,2);
		System.out.println(entityToString);
	}



輸出結果

Test1
{
    abc=agcsgdb,
    inte=123456,
    bool=false,
    ch=o,
    dou=5465.15,
    lo=987654,
    map={
        ex=45,
        name=gas;ldkf
    },
    list=[
        a,
        b,
        c
    ],
    set=[
        {
            a=aaaaaaaaaaaa,
            test1={
                abc=agcsgdb,
                inte=123456,
                bool=false,
                ch=o,
                dou=5465.15,
                lo=987654,
                map={
                    ex=45,
                    name=gas;ldkf
                },
                list=[
                    a,
                    b,
                    c
                ],
                set=[
                    en[email protected],
                    [email protected]
                ],
                strs=[
                    a,
                    b,
                    c
                ],
                file=d: \test.txt,
                [email protected]
            }
        },
        {
            a=bbbbbbbbbbb,
            test1={
                abc=agcsgdb,
                inte=123456,
                bool=false,
                ch=o,
                dou=5465.15,
                lo=987654,
                map={
                    ex=45,
                    name=gas;ldkf
                },
                list=[
                    a,
                    b,
                    c
                ],
                set=[
                    [email protected],
                    [email protected]
                ],
                strs=[
                    a,
                    b,
                    c
                ],
                file=d: \test.txt,
                [email protected]
            }
        }
    ],
    strs=[
        a,
        b,
        c
    ],
    file=d: \test.txt,
    test2={
        a=aaaaaaaaaaaa,
        test1={
            abc=agcsgdb,
            inte=123456,
            bool=false,
            ch=o,
            dou=5465.15,
            lo=987654,
            map={
                ex=45,
                name=gas;ldkf
            },
            list=[
                a,
                b,
                c
            ],
            set=[
                [email protected],
                [email protected]
            ],
            strs=[
                a,
                b,
                c
            ],
            file=d: \test.txt,
            [email protected]
        }
    }
}


相關推薦

entity pojo vo 轉換 string json

如題   entity  pojo  vo  轉換為  string 或 json 這個是我在程式碼中 要 記錄 日誌  ,  我們 用的是hibernate 所以 關聯 的表  巢狀的表 和多  ,層次 也很深 。 用 其他的 一些 轉換 成 string  的 方法

java讀取json檔案並轉換String

import java.io.*; public class Output { //測試 public static void main(String[] args){ String json = "null"; try { json = readJsonData("I

js將某個值轉換String字串型別轉換Number數字型別

將某個值轉換為String型別 1. value.toString() toString()方法返回一個表示該物件的字串 var a = 123 a.toString() // '123' 2. "" + value 一元加法運算子的作用是數值求和,或者字串拼接。有字串,則是字串拼接。其他是數字相加求和

C# 將 HTML 轉換圖片 PDF

ont gif completed 字段 sed pad cli 滾動條 lose 首先是把 HTML 轉換為圖片。 public partial class Form1 : Form { public Form1() {

SpringMVC表單中post請求轉換putdelete請求

hidden delet path web 需要 轉化 value 參數 text   1.在web.xml文件中配置 1 <!-- HiddenHttpMethodFilter過濾器可以將POST請求轉化為put請求和delete請求! -->

InputStream轉換String, byte[] data = new byte[1024]詳解

() gpo ring copyright create import number rgs write /** * This file created at 2018年2月28日. * * Copyright (c) 2002-2018 Bingosoft, In

python 陣列轉換string

先看下join函式: 語法為: str.join(sequence) sequence -- 要連線的元素序列 例項一:連線字串 str1 = '-' seq = ("a", "b", "c") print str1.join(seq) 例項二:連線陣列(陣列元素為字串

【C++】int轉換string的兩種方法(to_string、字串流)轉載

int轉換成string的兩種方法 第一種是to_string函式,這是C++11新增的,使用非常方便,簡單查了下:C++11標準增加了全域性函式std::to_string,以及std::stoi/stol/stoll等等函式(這幾個就是string轉int,long,以及long lo

X++: 將查詢結果轉換通用的JSON物件

public static FreeStyle.D365Tools.GMap getCursorValues(Common _table,Map pvSchema) { FreeStyle.D365Tools.GMap lvMap=FreeStyle.D365Tool

solidity智慧合約[14]-動態位元組陣列轉換string

動態位元組陣列轉換為string 動態位元組陣列可以通過string(name)非常直接的轉換為string型別,下面為例子: 1234567891011121314 pragma solidity ^0.4.23;contract dynamicTostring{ &

如何讓byte陣列轉換String字串時候去除亂碼的問號

1. 加入這家公司一直跟通訊層打交道  天天使用byte陣列傳遞資料  好懷念 使用http協議 傳資料  至少人家 okttp 或者retrofit幫你封裝好了 現在 天天是十進位制轉換為16進位制,byte 陣列轉換成short,int ,String  

js資料型別強制轉換--轉換String

強制型別轉換     -指的是將一個數據型別轉換為其他資料型別     -型別轉換主要是指,將其他的資料型別,轉換為             St

c++可以把任意基本型別轉換string, 類似於c 語言中的 sprintf函式

//c++中按照格式輸入輸出 類似於c 語言中的 sprintf函式 #include<iostream> #include<sstream>//std::stringstream 標頭檔案 int main() { std::string str = "高海文"

Java將一個基本資料型別轉換String的方法及效率比較

把一個基本資料型別轉為字串型別,有三種方法。 假設a是integer型別的資料 方法1:a.toString(); 方法2:String.valueOf(a); 方法3:a+""; 效率比較: 方法1效率最快、其次到方法2、最後才是方法3; 原因: 1.a

Object型別轉換String型別

1. Object.toString() 1 obj.toString()

java wxpay簽名,map轉換String

在完成wxpay開發時,需通過MD5簽名,生成sign。 在此過程中,需對map中的key按照ASCII碼值順序進行排序,程式碼如下: package com.yzq.te; import java.util.Iterator;import java.util.Map;import java.util.

byte陣列轉換String字串

平時經常會使用Bytes.toString(byte[] b)這種方法,但是這個是Hbase自帶的Bytes工具類,一旦離開Hbase的依賴那麼只能自己寫個工具類來轉換了,於是乎想到將Hbase的Bytes中部分方法提出來寫成自己的工具類,畢竟大牛寫的程式碼還是很信賴的,於是就產生了下面的工具類:public

java JSONObject轉換String格式

在使用微信支付時,需將從前臺接收的JSONObeject 格式資料轉換為String型別,其具體的轉換過程如下:   JSONObject jsonObject = JSONObject.parseObject(XmltoJsonUtil.xml2JSON(content)); JSONObje

java xml轉換String

public class XmltoJsonUtil { public static String xml2JSON(String xml) { JSONObject obj = new JSONObject(); try { InputStream is = new ByteArrayInputStream

把byte[]轉換String

/* * 此方法將藍芽通訊返回的位元組轉換為字串 */ public static String bytesToString(byte[] bytes) {