实体数据集合怎么封装成json数据

实体数据集合怎么封装成json数据,第1张

网上有JSONUtils的实例源码,直接自己搜一个好了

import java.beans.IntrospectionException

import java.beans.Introspector

import java.beans.PropertyDescriptor

import java.math.BigDecimal

import java.math.BigInteger

import java.util.List

import java.util.Map

import java.util.Set

public class JsonUtils

{

    /** Commons Logging instance. */

    private static org.apache.commons.logging.Log log =

        org.apache.commons.logging.LogFactory.getLog(JsonUtils.class)

    /**

     * @param obj 任意对象

     * @return String

     */

    public static String object2json(Object obj) {

        StringBuilder json = new StringBuilder()

        if (obj == null) {

            json.append("\"\"")

        } else if (obj instanceof String || obj instanceof Integer || obj instanceof Float 

                || obj instanceof Boolean || obj instanceof Short || obj instanceof Double 

                || obj instanceof Long || obj instanceof BigDecimal

                || obj instanceof BigInteger || obj instanceof Byte) {

            json.append("\"").append(string2json(obj.toString())).append("\"")

        } else if (obj instanceof Object[]) {

            json.append(array2json((Object[]) obj))

        } else if (obj instanceof List) {

            json.append(list2json((List<?>) obj))

        } else if (obj instanceof Map) {

            json.append(map2json((Map<?, ?>) obj))

        } else if (obj instanceof Set) {

            json.append(set2json((Set<?>) obj))

        } else {

            json.append(bean2json(obj))

        }

        return json.toString()

    }

    /**

     * @param bean bean对象

     * @return String

     */

    public static String bean2json(Object bean) {

        StringBuilder json = new StringBuilder()

        json.append("{")

        PropertyDescriptor[] props = null

        try {

            props = Introspector.getBeanInfo

                (bean.getClass(), Object.class).getPropertyDescriptors()

        } catch (IntrospectionException e) {

            e.printStackTrace()

        }

        if (props != null) {

            for (int i = 0 i < props.length i++) {

                try {

                    String name = object2json(props[i].getName())

                    String value = object2json(props[i].getReadMethod().invoke(bean))

                    json.append(name)

                    json.append(":")

                    json.append(value)

                    json.append(",")

                } catch (Exception e) {

                    e.printStackTrace()

                }

            }

            json.setCharAt(json.length() - 1, '}')

        } else {

            json.append("}")

        }

        return json.toString()

    }

    /**

     * @param list list对象

     * @return String

     */

    public static String list2json(List<?> list) {

        StringBuilder json = new StringBuilder()

        json.append("[")

        if (list != null && list.size() > 0) {

            for (Object obj : list) {

                json.append(object2json(obj))

                json.append(",")

            }

            json.setCharAt(json.length() - 1, ']')

        } else {

            json.append("]")

        }

        return json.toString()

    }

    /**

     * @param array 对象数组

     * @return String

     */

    public static String array2json(Object[] array) {

        StringBuilder json = new StringBuilder()

        json.append("[")

        if (array != null && array.length > 0) {

            for (Object obj : array) {

                json.append(object2json(obj))

                json.append(",")

            }

            json.setCharAt(json.length() - 1, ']')

        } else {

            json.append("]")

        }

        return json.toString()

    }

    /**

     * @param map map对象

     * @return String

     */

    public static String map2json(Map<?, ?> map) {

        StringBuilder json = new StringBuilder()

        json.append("{")

        if (map != null && map.size() > 0) {

            for (Object key : map.keySet()) {

                json.append(object2json(key))

                json.append(":")

                json.append(object2json(map.get(key)))

                json.append(",")

            }

            json.setCharAt(json.length() - 1, '}')

        } else {

            json.append("}")

        }

        return json.toString()

    }

    /**

     * @param set 集合对象

     * @return String

     */

    public static String set2json(Set<?> set) {

        StringBuilder json = new StringBuilder()

        json.append("[")

        if (set != null && set.size() > 0) {

            for (Object obj : set) {

                json.append(object2json(obj))

                json.append(",")

            }

            json.setCharAt(json.length() - 1, ']')

        } else {

            json.append("]")

        }

        return json.toString()

    }

    /**

     * @param s 参数

     * @return String

     */

    public static String string2json(String s) {

        if (null == s){

            return ""

        }

        StringBuilder sb = new StringBuilder()

        for (int i = 0 i < s.length() i++) {

            char ch = s.charAt(i)

            switch (ch) {

            case '"':

                sb.append("\\\"")

                break

            case '\\':

                sb.append("\\\\")

                break

            case '\b':

                sb.append("\\b")

                break

            case '\f':

                sb.append("\\f")

                break

            case '\n':

                sb.append("\\n")

                break

            case '\r':

                sb.append("\\r")

                break

            case '\t':

                sb.append("\\t")

                break

            case '/':

                sb.append("\\/")

                break

            default:

                if (ch >= '\u0000' && ch <= '\u001F') {

                    String ss = Integer.toHexString(ch)

                    sb.append("\\u")

                    for (int k = 0 k < 4 - ss.length() k++) {

                        sb.append('0')

                    }

                    sb.append(ss.toUpperCase())

                } else {

                    sb.append(ch)

                }

            }

        }

        return sb.toString()

    }

}

java中将数据封装为JSON包,可以使用java提供的jsonArray这个工具类进行转换,代码如下:

package com.json

import java.io.IOException

import java.util.ArrayList

import java.util.Collection

import java.util.HashMap

import java.util.Iterator

import java.util.List

import java.util.Map

import javax.servlet.http.HttpServletResponse

import net.sf.json.JSONArray

import net.sf.json.JSONObject

import org.apache.commons.beanutils.BeanUtils

import org.apache.struts2.ServletActionContext

import com.opensymphony.xwork2.ActionContext

public class JSONUtils

{

/**

* @author wangwei JSON工具类

* @param <T>

*/

/***

* 将List对象序列化为JSON文本

*/

public static <T> String toJSONString(List<T> list)

{

JSONArray jsonArray = JSONArray.fromObject(list)

return jsonArray.toString()

}

/***

* 将对象序列化为JSON文本

* @param object

* @return

*/

public static String toJSONString(Object object)

{

JSONArray jsonArray = JSONArray.fromObject(object)

return jsonArray.toString()

}

/***

* 将JSON对象数组序列化为JSON文本

* @param jsonArray

* @return

*/

public static String toJSONString(JSONArray jsonArray)

{

return jsonArray.toString()

}

/***

* 将JSON对象序列化为JSON文本

* @param jsonObject

* @return

*/

public static String toJSONString(JSONObject jsonObject)

{

return jsonObject.toString()

/***

* 将对象转换为List对象

* @param object

* @return

*/

public static List toArrayList(Object object)

{

List arrayList = new ArrayList()

JSONArray jsonArray = JSONArray.fromObject(object)

Iterator it = jsonArray.iterator()

while (it.hasNext())

{

JSONObject jsonObject = (JSONObject) it.next()

Iterator keys = jsonObject.keys()

while (keys.hasNext())

{

Object key = keys.next()

Object value = jsonObject.get(key)

arrayList.add(value)

}

}

return arrayList

}

/***

* 将对象转换为Collection对象

* @param object

* @return

*/

public static Collection toCollection(Object object)

{

JSONArray jsonArray = JSONArray.fromObject(object)

return JSONArray.toCollection(jsonArray)

}

/***

* 将对象转换为JSON对象数组

* @param object

* @return

*/

public static JSONArray toJSONArray(Object object)

{

return JSONArray.fromObject(object)

}

/***

* 将对象转换为JSON对象

* @param object

* @return

*/

public static JSONObject toJSONObject(Object object)

{

return JSONObject.fromObject(object)

}

/***

* 将对象转换为HashMap

* @param object

* @return

*/

public static HashMap toHashMap(Object object)

{

HashMap<String, Object> data = new HashMap<String, Object>()

JSONObject jsonObject = JSONUtils.toJSONObject(object)

Iterator it = jsonObject.keys()

while (it.hasNext())

{

String key = String.valueOf(it.next())

Object value = jsonObject.get(key)

data.put(key, value)

}

return data

}

/***

* 将对象转换为List<Map<String,Object>>

* @param object

* @return

*/

// 返回非实体类型(Map<String,Object>)的List

public static List<Map<String, Object>> toList(Object object)

{

List<Map<String, Object>> list = new ArrayList<Map<String, Object>>()

JSONArray jsonArray = JSONArray.fromObject(object)

for (Object obj : jsonArray)

{

JSONObject jsonObject = (JSONObject) obj

Map<String, Object> map = new HashMap<String, Object>()

Iterator it = jsonObject.keys()

while (it.hasNext())

{

String key = (String) it.next()

Object value = jsonObject.get(key)

map.put((String) key, value)

}

list.add(map)

}

return list

}

/***

* 将JSON对象数组转换为传入类型的List

* @param <T>

* @param jsonArray

* @param objectClass

* @return

*/

public static <T> List<T> toList(JSONArray jsonArray, Class<T> objectClass)

{

return JSONArray.toList(jsonArray, objectClass)

}

/***

* 将对象转换为传入类型的List

* @param <T>

* @param jsonArray

* @param objectClass

* @return

*/

public static <T> List<T> toList(Object object, Class<T> objectClass)

{

JSONArray jsonArray = JSONArray.fromObject(object)

return JSONArray.toList(jsonArray, objectClass)

}

/***

* 将JSON对象转换为传入类型的对象

* @param <T>

* @param jsonObject

* @param beanClass

* @return

*/

public static <T> T toBean(JSONObject jsonObject, Class<T> beanClass)

{

return (T) JSONObject.toBean(jsonObject, beanClass)

}

/***

* 将将对象转换为传入类型的对象

* @param <T>

* @param object

* @param beanClass

* @return

*/

public static <T> T toBean(Object object, Class<T> beanClass)

{

JSONObject jsonObject = JSONObject.fromObject(object)

return (T) JSONObject.toBean(jsonObject, beanClass)

}

/***

* 将JSON文本反序列化为主从关系的实体

* @param <T> 泛型T 代表主实体类型

* @param <D> 泛型D 代表从实体类型

* @param jsonString JSON文本

* @param mainClass 主实体类型

* @param detailName 从实体类在主实体类中的属性名称

* @param detailClass 从实体类型

* @return

*/

public static <T, D> T toBean(String jsonString, Class<T> mainClass,

String detailName, Class<D> detailClass)

{

JSONObject jsonObject = JSONObject.fromObject(jsonString)

JSONArray jsonArray = (JSONArray) jsonObject.get(detailName)

T mainEntity = JSONUtils.toBean(jsonObject, mainClass)

List<D> detailList = JSONUtils.toList(jsonArray, detailClass)

try

{

BeanUtils.setProperty(mainEntity, detailName, detailList)

}

catch (Exception ex)

{

throw new RuntimeException("主从关系JSON反序列化实体失败!")

}

return mainEntity

}

/***

* 将JSON文本反序列化为主从关系的实体

* @param <T>泛型T 代表主实体类型

* @param <D1>泛型D1 代表从实体类型

* @param <D2>泛型D2 代表从实体类型

* @param jsonString JSON文本

* @param mainClass 主实体类型

* @param detailName1 从实体类在主实体类中的属性

* @param detailClass1 从实体类型

* @param detailName2 从实体类在主实体类中的属性

* @param detailClass2 从实体类型

* @return

*/

public static <T, D1, D2> T toBean(String jsonString, Class<T> mainClass,

String detailName1, Class<D1> detailClass1, String detailName2,

Class<D2> detailClass2)

{

JSONObject jsonObject = JSONObject.fromObject(jsonString)

JSONArray jsonArray1 = (JSONArray) jsonObject.get(detailName1)

JSONArray jsonArray2 = (JSONArray) jsonObject.get(detailName2)

T mainEntity = JSONUtils.toBean(jsonObject, mainClass)

List<D1> detailList1 = JSONUtils.toList(jsonArray1, detailClass1)

List<D2> detailList2 = JSONUtils.toList(jsonArray2, detailClass2)

try

{

BeanUtils.setProperty(mainEntity, detailName1, detailList1)

BeanUtils.setProperty(mainEntity, detailName2, detailList2)

}

catch (Exception ex)

{

throw new RuntimeException("主从关系JSON反序列化实体失败!")

}

return mainEntity

}

/***

* 将JSON文本反序列化为主从关系的实体

* @param <T>泛型T 代表主实体类型

* @param <D1>泛型D1 代表从实体类型

* @param <D2>泛型D2 代表从实体类型

* @param jsonString JSON文本

* @param mainClass 主实体类型

* @param detailName1 从实体类在主实体类中的属性

* @param detailClass1 从实体类型

* @param detailName2 从实体类在主实体类中的属性

* @param detailClass2 从实体类型

* @param detailName3 从实体类在主实体类中的属性

* @param detailClass3 从实体类型

* @return

*/

public static <T, D1, D2, D3> T toBean(String jsonString,

Class<T> mainClass, String detailName1, Class<D1> detailClass1,

String detailName2, Class<D2> detailClass2, String detailName3,

Class<D3> detailClass3)

{

JSONObject jsonObject = JSONObject.fromObject(jsonString)

JSONArray jsonArray1 = (JSONArray) jsonObject.get(detailName1)

JSONArray jsonArray2 = (JSONArray) jsonObject.get(detailName2)

JSONArray jsonArray3 = (JSONArray) jsonObject.get(detailName3)

T mainEntity = JSONUtils.toBean(jsonObject, mainClass)

List<D1> detailList1 = JSONUtils.toList(jsonArray1, detailClass1)

List<D2> detailList2 = JSONUtils.toList(jsonArray2, detailClass2)

List<D3> detailList3 = JSONUtils.toList(jsonArray3, detailClass3)

try

{

BeanUtils.setProperty(mainEntity, detailName1, detailList1)

BeanUtils.setProperty(mainEntity, detailName2, detailList2)

BeanUtils.setProperty(mainEntity, detailName3, detailList3)

}

catch (Exception ex)

{

throw new RuntimeException("主从关系JSON反序列化实体失败!")

}

return mainEntity

}

/***

* 将JSON文本反序列化为主从关系的实体

* @param <T> 主实体类型

* @param jsonString JSON文本

* @param mainClass 主实体类型

* @param detailClass 存放了多个从实体在主实体中属性名称和类型

* @return

*/

public static <T> T toBean(String jsonString, Class<T> mainClass,

HashMap<String, Class> detailClass)

{

JSONObject jsonObject = JSONObject.fromObject(jsonString)

T mainEntity = JSONUtils.toBean(jsonObject, mainClass)

for (Object key : detailClass.keySet())

{

try

{

Class value = (Class) detailClass.get(key)

BeanUtils.setProperty(mainEntity, key.toString(), value)

}

catch (Exception ex)

{

throw new RuntimeException("主从关系JSON反序列化实体失败!")

}

}

return mainEntity

}

/**

* 封装json数据从后台传输

* @param obj

*/

public static void outPutJson(Object obj){

ActionContext context = ActionContext.getContext()

HttpServletResponse response = (HttpServletResponse) context.get(ServletActionContext.HTTP_RESPONSE)

try {

response.getWriter().print(obj)

} catch (IOException e) {

e.printStackTrace()

}

}

}

//测试类

String s1 = "[{id:1, pId:0, name:\"test1\" , open:true}]" 

String s2 = "{id:2, pId:1, name:\"test211\" , open:true}" 

String s3 = "{id:3, pId:2, name:\"test311\" , open:true}" 

String s4 = "{id:4, pId:1, name:\"test411\" , open:true}"

List<String> listZtree = new ArrayList<String>()

listZtree.add(s1)

listZtree.add(s2)

listZtree.add(s3)

listZtree.add(s4)

System.out.println(JSONUtils.toJSONString(listZtree))

}


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/6717431.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-03-27
下一篇 2023-03-27

发表评论

登录后才能评论

评论列表(0条)

保存