`

Java中的JSON序列化和反序列化

阅读更多

每次写代码遇到问题的时候,google后总是先找javaeye里给出的答案,比较权威,比较专业,而且通常问题可以很快的解决。这两天在写一个.net客户端和java服务器端通过json报文,使用Mina框架通信的项目,为了减少编写代码的重复性,写了几个使用反射来通过函数名称调用该函数,以及Json序列化和反序列化的程序,现在想总结记录一下。
1. Java中的JSON序列化和反序列化例子:

      /**
	 * 由字符串反序列化成实体类  针对的是一个实体,此实体中的属性不包括自定义的类型,如Teacher类型,或者List<Teacher>类型 
	 * @param source 传入json中的字符串
	 * @param beanClass 实体类的类型
	 * @return 实体类
	 */
	public static Object getObjFromJsonArrStr(String source,Class beanClass)
	{
		JSONObject jsonObject = (JSONObject) JSONSerializer.toJSON(source);
		return  JSONObject.toBean(jsonObject,beanClass);		
	}
	/**
	 * 由字符串反序列化成实体类  针对的是一个实体,此实体中的属性包括自定义的类型,如Teacher类型,或者List<Teacher>类型
	 * @param jsonArrStr
	 * @param clazz
	 * @param classMap
	 * @return
	 */
	public static Object getObjFromJsonArrStr(String jsonArrStr, Class clazz, Map classMap) 
	{  
		JSONObject jsonObj = JSONObject.fromObject(jsonArrStr);  
                return JSONObject.toBean(jsonObj, clazz, classMap);            
	}

	
	/**
	 * 将string转换成listBean
	 * @param jsonArrStr 需要反序列化的字符串
	 * @param clazz 被反序列化之后的类
	 * @return 实体list
	 */
	@SuppressWarnings("unchecked")
	public static List getListFromJsonArrStr(String jsonArrStr, Class clazz) {  
        JSONArray jsonArr = JSONArray.fromObject(jsonArrStr);  
        List list = new ArrayList();  
        for (int i = 0; i < jsonArr.size(); i++) 
        {  
            list.add(JSONObject.toBean(jsonArr.getJSONObject(i), clazz));  
        }  
        return list;  
    } 

	/**
	 * 将string转换成listBean 属性中包含实体类等 如List<Student> 而Student中含有属性List<Teacher>
	 * @param jsonArrStr 需要反序列化的字符串
	 * @param clazz 反序列化后的类
	 * @param classMap 将属性中包含的如Teacher加入到一个Map中,格式如map.put("teacher",Teacher.class)
	 * @return 反序列化后的字符串
	 * 使用示例:
		Map classMap = new HashMap();
		//必须要对Parent进行初始化 否则不识别
		Teacher p = new Teacher();
		classMap.put("teacher", p.getClass());
		List mlist = JSONTransfer.getListFromJsonArrStr(resultStr, Student.class, classMap);
	 */
	@SuppressWarnings("unchecked")
	public static List getListFromJsonArrStr(String jsonArrStr, Class clazz, Map classMap) 
	{  
       JSONArray jsonArr = JSONArray.fromObject(jsonArrStr);  
       List list = new ArrayList();  
       for (int i = 0; i < jsonArr.size(); i++) 
       {      	   
           list.add(JSONObject.toBean(jsonArr.getJSONObject(i), clazz, classMap));  
       }  
       return list;  
	}
		
	/**
	 * 序列化操作,无论是单个的对象,还是list,抑或是list中的属性仍包含list,都可以直接序列化成String类型
	 * @param obj 需要被序列化的对象
	 * @return 序列化之后的字符串
	 */
	@SuppressWarnings("unchecked")
	public static String getJsonArrStrFromList(Object obj) 
	{ 
		//返回結果
		String jsonStr = null;  
	    //判空
        if (obj == null) {  
            return "{}";  
        }  
        //Json配置      
        JsonConfig jsonCfg = new JsonConfig();  
  
        //注册日期处理器  
        jsonCfg.registerJsonValueProcessor(java.util.Date.class,  
                new JsonDateValueProcessor(SystemConstants.DateFormat));  
        
        //判断是否是list
        if (obj instanceof Collection || obj instanceof Object[]) {  
            jsonStr = JSONArray.fromObject(obj, jsonCfg).toString();  
        } else {  
            jsonStr = JSONObject.fromObject(obj, jsonCfg).toString();  
        }  	  
        return jsonStr; 
    } 


分享到:
评论

相关推荐

    Java Json序列化与反序列化

    总结,Java中的JSON序列化与反序列化是数据交互的重要环节,Jackson和Gson是两个常用的库,它们提供了丰富的功能和良好的API设计,使得处理JSON数据变得简单高效。通过理解和掌握这些知识,开发者可以更好地在Java...

    json序列化与反序列化处理代码(java版本)

    极好的序列化与发序列化代码。可以处理array集合,数组或者单个对象等的序列化与反序列化。

    Json序列化与反序列化

    总结来说,JSON序列化与反序列化是现代Web开发中不可或缺的一部分,它提供了数据交换的标准格式,使得不同语言和平台之间的数据交互变得简单高效。正确理解和使用这一技术,能够极大地提升开发效率和软件的可维护性...

    Json序列化与反序列化详解

    在IT行业中,JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,广泛应用于服务器与客户端之间的数据...通过不断的实践和学习,开发者可以更好地驾驭JSON序列化与反序列化,从而更好地服务于项目需求。

    jackson json序列化,反序列化所需jar包

    Jackson是Java领域中广泛使用的JSON处理库,它提供了高效的JSON序列化和反序列化功能。在Java应用程序中,我们经常需要将Java对象转换为JSON字符串(序列化)或从JSON字符串恢复Java对象(反序列化),Jackson库就是...

    Json反序列化

    在本篇文章中,我们将深入探讨JSON反序列化的概念、原因以及在实际开发中的应用。 一、什么是JSON反序列化? 当一个Web服务端通过HTTP响应返回JSON格式的数据时,客户端(如浏览器或服务器端脚本)需要将这些数据...

    JSON序列化及反序列化工具

    10万次序列化,1万次反序列化,毫秒。 阿里序列化时间 1122 1054 1115 阿里反序列化时间 409 423 412 HZS序列化时间 884 864 880 HZS反序列化时间 392 375 394 JAVA7版已经逼近阿里的速度,JAVA8版利用了闭包技术...

    JSON序列化反序列化带List

    本文将深入探讨如何在Delphi中进行JSON序列化与反序列化,特别是涉及List类型的数据。 首先,从2010年开始,Delphi引入了VCL库中的`System.JSON`单元,提供了`TJSON`类和相关的函数,使得处理JSON变得十分方便。在...

    C#和Java的序列化反序列化

    Java中,除了基本的序列化机制,还有许多第三方库如Jackson、Gson等,它们提供了更高效、更灵活的JSON序列化和反序列化功能。例如,Jackson库的`ObjectMapper`类能够方便地将Java对象转换为JSON字符串,反之亦然。 ...

    Java使用JSON序列化教程

    JSON序列化与反序列化工具,常用的有第三方库如Jackson、Fastjson、Gson。 这些库提供了一些API和工具,可以将Java对象转换为JSON字符串,并将JSON字符串转换为Java对象。本文是使用这些库文件来实现JSON序列化的...

    Json序列化时动态处理属性

    JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,被广泛用于前后端数据传输。...在实际开发中,了解并熟练掌握这两个库的用法,将有助于提高工作效率,处理各种复杂的JSON序列化和反序列化场景。

    JSON序列化与反序列化JAVA工具

    10万次序列化,1万次反序列化,毫秒。 阿里序列化时间 1229 1133 1179 阿里反序列化时间 478 523 466 HZS序列化时间 1089 998 1010 HZS反序列化时间 606 623 635 测试代码如下: { org.hzs.json.JSONObject bjson...

    支持javax.money数据类型的JSON序列化和反序列化

    在Java开发中,JSON(JavaScript Object Notation)是一种广泛使用的轻量级数据交换格式,它易于人阅读和...在处理涉及货币数据的RESTful服务、微服务通信或任何需要JSON序列化的场景下,它都是一个非常实用的工具。

    又小又快又无依赖Json序列化与反序列化

    又小又快又无依赖Json序列化与反序列化 eg: 1.json序列化 String json=JsonUtil.instance().obj2Json(obj); 2.json反序列化(Object表示具体的类) Object obj=JsonUtil.instance().json2Obj(json,Object.class) ...

    json-lib 序列化和反序列化

    在`json-lib`中,序列化是指将Java对象转换成JSON字符串的过程,而反序列化则是将JSON字符串转换回Java对象。以下是对这两个过程的详细说明: 1. **序列化**: - 使用`json-lib`,你可以通过`...

    Java对象的序列化和反序列化实践

    在Java编程语言中,对象的序列化和反序列化是两个关键的概念,它们允许我们将对象的状态转换为可存储或传输的格式,然后再恢复为原始对象。这个过程对于数据持久化、网络传输以及跨进程通信等场景非常有用。下面将...

    将dataset json序列化和反序列化成dataset (非常不容易做完了)

    .net 将dataset json序列化和反序列化成dataset JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。易于人阅读和编写。同时也易于机器解析和生成。它基于JavaScript(Standard ECMA-262 3rd Edition - ...

    json序列化与反序列化demo

    在Java世界里,为了方便地进行JSON的序列化(将Java对象转换为JSON字符串)和反序列化(将JSON字符串转换回Java对象),有多个库提供了强大的支持,其中包括Gson、Jackson、Fastjson以及LoganSquare。接下来,我们将...

    JSon发序列化总结

    JSON序列化和反序列化是现代Web开发中不可或缺的技术之一。在C#中,可以根据具体需求选择不同的序列化工具。对于.NET Framework项目,DataContractJsonSerializer和JavaScriptSerializer都是不错的选择;而对于.NET ...

    java 常用序列化和反序列化框架使用demo

    除了基础的JSON序列化,Jackson还支持`@JsonSerialize`和`@JsonDeserialize`注解来自定义序列化和反序列化行为。 ```java import com.fasterxml.jackson.databind.ObjectMapper; ObjectMapper mapper = new ...

Global site tag (gtag.js) - Google Analytics