JackSon 数据之间的转换 java

来源:互联网 发布:中国gdp增速放缓知乎 编辑:程序博客网 时间:2024/06/16 06:04

<strong><span style="font-size:18px;">json 与对象 list map 数组之间的转换</span></strong>
JackSon的工具类
package JsonUtil;import java.io.IOException;import java.util.Collection;import java.util.Map;import org.codehaus.jackson.map.ObjectMapper;import org.codehaus.jackson.type.JavaType;@SuppressWarnings("all")public class JackSonUtil {protected static final ObjectMapper mapper = new ObjectMapper();/** * 如果JSON字符串为Null或"null"字符串,返回Null. 如果JSON字符串为"[]",返回空集合. *  * */public static <T> T fromJson(String jsonString, Class<T> clazz) {if (jsonString == null || jsonString.length() == 0) {return null;}try {return mapper.readValue(jsonString, clazz);} catch (IOException e) {return null;}}/** * 如果对象为Null,返回"null". 如果集合为空集合,返回"[]". */public static String toJson(Object object) {try {return mapper.writeValueAsString(object);} catch (IOException e) {return null;}}/** * @param jsonStr * @param type * @return json数据转换成map */public static Map<?, ?> fromJsonToMap(String jsonStr, JavaType type) {if (jsonStr == null || jsonStr.length() == 0) {return null;}try {return mapper.readValue(jsonStr, type);} catch (IOException e) {return null;}}/** * @param jsonStr * @param type * @return json数据转换成list */public static <T extends Collection> T fromJsonToCollection(String jsonStr, JavaType type) {if (jsonStr == null || jsonStr.length() == 0) {return null;}try {return (T) mapper.readValue(jsonStr, type);} catch (IOException e) {return null;}}/** * @param jsonStr * @param elementClasses * @return json数据转换成数组 */public static <T extends Object> T[] fromJsonToArray(String jsonStr, Class<?> elementClasses) {if (jsonStr == null || jsonStr.length() == 0) {return null;}try {return (T[]) mapper.readValue(jsonStr, elementClasses);} catch (IOException e) {return null;}}/** * 获取泛型的Collection Type *  * @param collectionClass *            泛型的Collection * @param elementClasses *            元素类 * @return JavaType Java类型 * @since 1.0 */public static JavaType getCollectionType(Class<?> collectionClass, Class<?>... elementClasses) {return mapper.getTypeFactory().constructParametricType(collectionClass, elementClasses);}}

JackSon 工具类的使用
package MainTest;import java.util.ArrayList;import java.util.HashMap;import java.util.List;import java.util.Map;import org.codehaus.jackson.type.JavaType;import JsonUtil.JackSonUtil;import models.Person;public class JsonTest {public static void main(String[] args) {Person person = new Person("Lucy", 20, "男", "中国");Person person1 = new Person("Lucy1", 20, "男", "中国");Person person2 = new Person("Lucy2", 20, "男", "中国");Person person3 = new Person("Lucy3", 20, "男", "中国");System.err.println("一个对象转换成Json字符");System.err.println(JackSonUtil.toJson(person));List<Object> list = new ArrayList<Object>();list.add(person);list.add(person1);list.add(person2);list.add(person3);String jsonStr = JackSonUtil.toJson(list);System.err.println(" List集合转换成json方法");System.err.println(jsonStr);System.err.println("Json字符转换成List对象");JavaType javaType = JackSonUtil.getCollectionType(ArrayList.class, Person.class);List<Person> persons = JackSonUtil.fromJsonToCollection(jsonStr, javaType);for (Person p : persons) {System.err.print(JackSonUtil.toJson(person) + "     ");}System.err.println("Map集合转换成json方法");Map<String, Object> map = new HashMap<String, Object>();map.put("学生", person);map.put("学生1", person1);map.put("学生2", person2);map.put("学生3", person3);String mapJsonStr = JackSonUtil.toJson(map);System.err.println(mapJsonStr);System.err.println("Json字符转换成Map对象");JavaType javaType1 = JackSonUtil.getCollectionType(Map.class, String.class, Person.class);Map<String, Person> personMap = (Map<String, Person>) JackSonUtil.fromJsonToMap(mapJsonStr, javaType1);System.err.println(personMap);for (Object key : personMap.keySet()) {System.err.print("key=" + key + " value=" + JackSonUtil.toJson(personMap.get(key)));System.err.println();}System.err.println("数组与JSON之间的转换");Person[] personArray = { person, person1, person2, person3 };String arrayStr = JackSonUtil.toJson(personArray);System.err.println(arrayStr);Person[] personArray1 = (Person[]) JackSonUtil.fromJsonToArray(arrayStr, Person[].class);for (Person p : personArray1) {System.err.println(JackSonUtil.toJson(p));}}}
打印的结果


一个对象转换成Json字符
{"name":"Lucy","age":20,"sex":"男","address":"中国"}
 List集合转换成json方法
[{"name":"Lucy","age":20,"sex":"男","address":"中国"},{"name":"Lucy1","age":20,"sex":"男","address":"中国"},{"name":"Lucy2","age":20,"sex":"男","address":"中国"},{"name":"Lucy3","age":20,"sex":"男","address":"中国"}]
Json字符转换成List对象
{"name":"Lucy","age":20,"sex":"男","address":"中国"}     {"name":"Lucy","age":20,"sex":"男","address":"中国"}     {"name":"Lucy","age":20,"sex":"男","address":"中国"}     {"name":"Lucy","age":20,"sex":"男","address":"中国"}     Map集合转换成json方法
{"学生":{"name":"Lucy","age":20,"sex":"男","address":"中国"},"学生2":{"name":"Lucy2","age":20,"sex":"男","address":"中国"},"学生1":{"name":"Lucy1","age":20,"sex":"男","address":"中国"},"学生3":{"name":"Lucy3","age":20,"sex":"男","address":"中国"}}
Json字符转换成Map对象
{学生=models.Person@2d6e8792, 学生2=models.Person@2812cbfa, 学生1=models.Person@2acf57e3, 学生3=models.Person@506e6d5e}
key=学生 value={"name":"Lucy","age":20,"sex":"男","address":"中国"}
key=学生2 value={"name":"Lucy2","age":20,"sex":"男","address":"中国"}
key=学生1 value={"name":"Lucy1","age":20,"sex":"男","address":"中国"}
key=学生3 value={"name":"Lucy3","age":20,"sex":"男","address":"中国"}
数组与JSON之间的转换
[{"name":"Lucy","age":20,"sex":"男","address":"中国"},{"name":"Lucy1","age":20,"sex":"男","address":"中国"},{"name":"Lucy2","age":20,"sex":"男","address":"中国"},{"name":"Lucy3","age":20,"sex":"男","address":"中国"}]
{"name":"Lucy","age":20,"sex":"男","address":"中国"}
{"name":"Lucy1","age":20,"sex":"男","address":"中国"}
{"name":"Lucy2","age":20,"sex":"男","address":"中国"}
{"name":"Lucy3","age":20,"sex":"男","address":"中国"}

0 0