每次写代码遇到问题的时候,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序列化与反序列化
极好的序列化与发序列化代码。可以处理array集合,数组或者单个对象等的序列化与反序列化。
10万次序列化,1万次反序列化,毫秒。 阿里序列化时间 1122 1054 1115 阿里反序列化时间 409 423 412 HZS序列化时间 884 864 880 HZS反序列化时间 392 375 394 JAVA7版已经逼近阿里的速度,JAVA8版利用了闭包技术...
Jackson-datatype-money - 开源的Jackson模块,支持Java货币数据类型的JSON序列化和反序列化
10万次序列化,1万次反序列化,毫秒。 阿里序列化时间 1229 1133 1179 阿里反序列化时间 478 523 466 HZS序列化时间 1089 998 1010 HZS反序列化时间 606 623 635 测试代码如下: { org.hzs.json.JSONObject bjson...
又小又快又无依赖Json序列化与反序列化 eg: 1.json序列化 String json=JsonUtil.instance().obj2Json(obj); 2.json反序列化(Object表示具体的类) Object obj=JsonUtil.instance().json2Obj(json,Object.class) ...
本资源Java中常用的Json序列化jar包,包括Google的gson.jar序列化包和常用的Json序列化包,亲测可用。 版本分别为:gson-2.8.2.jar和json-20170516.jar
NULL 博文链接:https://assassinme.iteye.com/blog/2369297
Gson 中解决 json 反序列化时相同属性对应不同类型的值的问题(代码),对应文章链接:https://blog.csdn.net/ZiFung_Yip/article/details/89143255
java笔试题输出结果 Java JSON 库的基准测试 目的 该项目使用 . 它涵盖以下库: (来自Oracle) 如果可用,数据绑定和“流”(自定义打包和解包)实现都经过测试。 使用 1、10、100 和 1000 KB 大小的有效负载评估两...
主要介绍了java对象序列化与反序列化的默认格式和json格式使用示例,需要的朋友可以参考下
主要介绍了实例解析Json反序列化之ObjectMapper,json自定义序列化的方法,需要的朋友可以了解下。
.net 将dataset json序列化和反序列化成dataset JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。易于人阅读和编写。同时也易于机器解析和生成。它基于JavaScript(Standard ECMA-262 3rd Edition - ...
Flexjson is a lightweight library for serializing and deserializing Java objects into and from JSON. What's different about Flexjson is it's control over what gets serialized allowing both deep and ...
看雪2017安全开发者峰会ppt-10.Java_JSON反序列化之殇
函数API接口感受到非常不适应,你一定非常怀念使用java和C#对一个实体类的那么轻松加简单的直接json序列化,本篇博客使用一个RapidJsonHelper类,将帮你实现对一个C++实体类的的序列化和反序列化。rapidjson的版本是...
C#后台处理JSon数据
Java和JSON-使用ObjectMapper的Jackson示例 该存储库包含博客文章中使用的代码示例...Jackson-使用JsonNode反序列化值 杰克逊–反序列化为简单的Java对象 Jackson –使用Empty Constructor反序列化为简单的Java对象 Ja
使用Jackson进行json序列化的小例子。
jackson工具库,支持JSON,XML格式实现java序列化反序列化操作。在XML格式进行反序列化时有一定的限制