在项目中,需要使用json字符串,有时候又需要将字符串转换为对象,以前写代码是直接在代码中写,方法如下:
package com.suning.review.admin.job; import java.util.ArrayList; import java.util.List; import com.google.gson.Gson; import com.google.gson.GsonBuilder; import com.google.gson.reflect.TypeToken; public class JsonTest { private static Gson gson = new GsonBuilder().enableComplexMapKeySerialization() .setDateFormat("yyyy-MM-dd HH:mm:ss").create(); public static void main(String[] args) { People p1 = new People(1, 20, "jack"); People p2 = new People(2, 21, "tom"); List<People> peoples = new ArrayList<People>(); peoples.add(p1); peoples.add(p2); String p1Str = gson.toJson(p1); // {"id":1,"age":20,"name":"jack"} String listStr = gson.toJson(peoples); // [{"id":1,"age":20,"name":"jack"},{"id":2,"age":21,"name":"tom"}] // 将字符串转换为对象 People people = gson.fromJson(p1Str, People.class); List<People> peopleList = gson.fromJson(listStr, new TypeToken<List<People>>() { }.getType()); } }
这样写当然是可以的,但是缺点是每一个需要使用到json与对象之间相互转换的类中都要声明Gson gson变量,为了代码的可重用性和设计清晰原则,可以将该json与object类转换抽取出来,独立成一个方法工具类,如下:
package util; import java.io.IOException; import java.io.UnsupportedEncodingException; import org.codehaus.jackson.JsonGenerationException; import org.codehaus.jackson.type.TypeReference; import org.codehaus.jackson.map.JsonMappingException; import org.codehaus.jackson.map.ObjectMapper; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import com.google.gson.JsonParseException; /** * json转换类 */ public class JsonConvert { private static final ObjectMapper mpper = new ObjectMapper(); private static final Logger LOGGER = LoggerFactory.getLogger(JsonConvert.class); /** * json 转换为 对象 * @param json json串 * @param cl 类型 * @return * @see [相关类/方法](可选) * @since [产品/模块版本](可选) */ public static <T> T jsonToObject(String json, Class<T> cl) { LOGGER.debug("Enter method jsonToObject"); LOGGER.debug("param=" + json); try { T obj = mpper.readValue(json.getBytes("UTF-8"), cl); return obj; } catch (JsonParseException e) { LOGGER.error("JsonParseException", e); } catch (JsonMappingException e) { LOGGER.error("JsonMappingException", e); } catch (UnsupportedEncodingException e) { LOGGER.error("UnsupportedEncodingException", e); } catch (IOException e) { LOGGER.error("IOException", e); } LOGGER.debug("Exit method jsonToObject"); return null; } public static <T> T jsonToObject(String json, TypeReference<T> cl){ LOGGER.debug("Enter method jsonToObject1"); LOGGER.debug("param=" + json); try { T t = mpper.readValue(json, cl); return t; } catch (Exception e) { LOGGER.error("jsonToObject1 occur Exception", e); } LOGGER.debug("Exit method jsonToObject"); return null; } /** * 对象转换为json * @param obj 需要转换对象 * @return 转换后的json串 * @see [相关类/方法](可选) * @since [产品/模块版本](可选) */ public static String objectoJson(Object obj) { LOGGER.debug("Enter method objectoJson"); try { return mpper.writeValueAsString(obj); } catch (JsonGenerationException e) { LOGGER.error("JsonGenerationException", e); } catch (JsonMappingException e) { LOGGER.error("JsonMappingException", e); } catch (IOException e) { LOGGER.error("IOException", e); } LOGGER.debug("Exit method objectoJson"); return null; } }
如果使用该工具类,jsonTest可改变如下:
import java.util.ArrayList; import java.util.List; import org.codehaus.jackson.type.TypeReference; import com.suning.review.util.JsonConvert; public class JsonTest { public static void main(String[] args) { People p1 = new People(1, 20, "jack"); People p2 = new People(2, 21, "tom"); List<People> peoples = new ArrayList<People>(); peoples.add(p1); peoples.add(p2); String p1Str = JsonConvert.objectoJson(p1); // {"id":1,"age":20,"name":"jack"} String listStr = JsonConvert.objectoJson(peoples); // [{"id":1,"age":20,"name":"jack"},{"id":2,"age":21,"name":"tom"}] // 将字符串转换为对象 People people = JsonConvert.jsonToObject(p1Str, People.class); List<People> peopleList = JsonConvert.jsonToObject(listStr, new TypeReference<List<People>>() { }); } }
对象与字符串的相互转换就是使用反射来实现的,具体怎么实现的还得看源码啊
相关推荐
json格式与java类对象相互转换。json格式转换成java类对象,List,Map。类对象转换成json。
json 字符串转成c++类对象,json 字符串转成c++类对象
NULL 博文链接:https://koowo88.iteye.com/blog/545995
Json对象与json字符串互相转换处理工具
form数据与json对象的互相转换(完整版) * 将web Form 的数据转化成json字符串 * 将json对象的值解析后填入web Form 在AJAX开发中这是关键技术: 1、将form中的数据利用本工具转换成json格式的字符串,再通过ajax传...
java 对象与json字符串互相转换工具类所需要的jar,java 对象与json字符串互相转换工具类
json和对象相互转换
纯javascript实现json与对象的互相转换完整项目,原创
Json与java对象之间相互转换源码,测试,练习
C# json格式转换,Json格式字符串与C#对象相互转换,类库和测试demo 写了一个json与C#对象相互装换的类库,直接调用就行,有测试案例,代码注释非常详细 部分方法: /// 将Json字符串解析为C#中的对象 /// Json格式...
json转对象 json转实体 利用阿里巴巴 fastjson 将对象 与json 数据互相转换 http://blog.csdn.net/chenmmo/article/details/70154964
安卓移动端中实现JSON和对象&数组的相互转换的工具类,代码里有注释
c#与json对象互转 该文件使用原生的类实现 c#对象 与json对象的互相转换
Java对Json的一系列操作(构建、json与对象的转换),详细介绍了在Java中,对json数据的创建、以及字符串、对象与json的相互转换
使用jackson完成json与java对象的互相转换实例
源码举了几个例子说明如何让JSON与Java对象实现互相转换。相关转换方法都封装到工具类当中。
简单的Json转化类,Json格式与Json对象之间互相转换。 示例:(文件内附示例) string s = "{\r\n" + "\"name\":\"Bill Gates\",\r\n"+ "\"street\":\"Fifth Avenue New York 666\",\r\n"+ "\"age\":56,\r\n"+ ...
webservice接口开发中,厂家提供的json格式,json与obj的相互转化,相信大家都很熟悉,考虑到厂家提供的接口会随着版本的不同,字段也会相应的增加,这个时候进行对象的转换就不能保证json与obj转换是一一对应的,...
xml使用实例,与json与类对象的互相转换