JsonUtils

来源:互联网 发布:js 简单加密算法 编辑:程序博客网 时间:2024/05/16 16:13
package com.util.json;import java.beans.IntrospectionException;import java.beans.Introspector;import java.beans.PropertyDescriptor;import java.io.BufferedReader;import java.io.IOException;import java.io.InputStream;import java.io.InputStreamReader;import java.net.MalformedURLException;import java.net.URL;import java.net.URLConnection;import java.util.ArrayList;import java.util.Date;import java.util.HashMap;import java.util.Iterator;import java.util.List;import java.util.Map;import java.util.Set;import net.sf.json.JSONArray;import net.sf.json.JSONObject;import com.util.DateUtils;public class JsonUtils {/** *  * <p>Title: <p> * <p>Description: 通过url读取json内容<p> * @author: Tony * @data: 2016年8月8日 * @param url * @return */public static String loadJsonByUrl (String url) {          StringBuilder json = new StringBuilder();          try {              URL urlObject = new URL(url);              URLConnection uc = urlObject.openConnection();              BufferedReader in = new BufferedReader(new InputStreamReader(uc.getInputStream()));              String inputLine = null;              while ( (inputLine = in.readLine()) != null) {                  json.append(inputLine);              }              in.close();        } catch (MalformedURLException e) {              e.printStackTrace();          } catch (IOException e) {              e.printStackTrace();          }          return json.toString();      } /** *  一个String字符串转换为json格式 *@descript *@param s *@return *@author tony *@date 2015年6月15日 *@version 1.0v */public static String stringToJson(String s) {if (s == null) {return nullToJson();}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();}public static String nullToJson() {return "";}/** * 一个obj对象转换为json格式 *@descript *@param obj *@return *@author tony *@date 2015年6月15日 *@version 1.0v */public static String objectToJson(Object obj) {StringBuilder json = new StringBuilder();if (obj == null) {json.append("\"\"");} else if (obj instanceof Date) {json.append(dateToJson(obj));} else if (obj instanceof Number) {json.append(numberToJson((Number) obj));} else if (obj instanceof Boolean) {json.append(booleanToJson((Boolean) obj));} else if (obj instanceof String) {json.append("\"").append(stringToJson(obj.toString())).append("\"");} else if (obj instanceof Object[]) {json.append(arrayToJson((Object[]) obj));} else if (obj instanceof List) {json.append(listToJson((List<?>) obj));} else if (obj instanceof Map) {json.append(mapToJson((Map<?, ?>) obj));} else if (obj instanceof Set) {json.append(setToJson((Set<?>) obj));} else {json.append(beanToJson(obj));}return json.toString();}public static String numberToJson(Number number) {return number.toString();}public static String booleanToJson(Boolean bool) {return bool.toString();}public static String dateToJson(Object obj) {System.out.println(obj);if (obj == null) {return "";} else {return "\"" + DateUtils.format((Date) obj, "yyyy-MM-dd HH:mm:ss") + "\"";}}/** *  一个bean对象转换为json格式 *@descript *@param bean *@return *@author tony *@date 2015年6月15日 *@version 1.0v */public static String beanToJson(Object bean) {StringBuilder json = new StringBuilder();json.append("{");PropertyDescriptor[] props = null;try {props = Introspector.getBeanInfo(bean.getClass(), Object.class).getPropertyDescriptors();} catch (IntrospectionException e) {}if (props != null) {for (int i = 0; i < props.length; i++) {try {String name = objectToJson(props[i].getName());String value = objectToJson(props[i].getReadMethod().invoke(bean));//System.out.println(props[i].getName() + "###" + props[i].getReadMethod().invoke(bean) + "##" + props[i].getPropertyType());json.append(name);json.append(":");json.append(value);json.append(",");} catch (Exception e) {}}json.setCharAt(json.length() - 1, '}');} else {json.append("}");}return json.toString();}/** *@descript *@param list *@return *@author tony *@date 2015年6月15日 *@version 1.0v */public static String listToJson(List<?> list) {StringBuilder json = new StringBuilder();json.append("[");if (list != null && list.size() > 0) {for (Object obj : list) {json.append(objectToJson(obj));json.append(",");}json.setCharAt(json.length() - 1, ']');} else {json.append("]");}return json.toString();}/** *  一个数组集合转换为json格式 *@descript *@param array *@return *@author tony *@date 2015年6月15日 *@version 1.0v */public static String arrayToJson(Object[] array) {StringBuilder json = new StringBuilder();json.append("[");if (array != null && array.length > 0) {for (Object obj : array) {json.append(objectToJson(obj));json.append(",");}json.setCharAt(json.length() - 1, ']');} else {json.append("]");}return json.toString();}/** * 一个Map集合转换为json格式 *@descript *@param map *@return *@author tony *@date 2015年6月15日 *@version 1.0v */public static String mapToJson(Map<?, ?> map) {StringBuilder json = new StringBuilder();json.append("{");if (map != null && map.size() > 0) {for (Object key : map.keySet()) {json.append(objectToJson(key));json.append(":");json.append(objectToJson(map.get(key)));json.append(",");}json.setCharAt(json.length() - 1, '}');} else {json.append("}");}return json.toString();}/** * 一个Set集合转换为json格式  *@descript *@param set *@return *@author tony *@date 2015年6月15日 *@version 1.0v */public static String setToJson(Set<?> set) {StringBuilder json = new StringBuilder();json.append("[");if (set != null && set.size() > 0) {for (Object obj : set) {json.append(objectToJson(obj));json.append(",");}json.setCharAt(json.length() - 1, ']');} else {json.append("]");}return json.toString();}/** * json字符串转换为List *@descript *@param jsonStr *@return *@author tony *@date 2015年6月15日 *@version 1.0v */@SuppressWarnings("unchecked")public static List<Map<String, Object>> parseJSONList(String jsonStr) {System.out.println(jsonStr);JSONArray jsonArr = JSONArray.fromObject(jsonStr);List<Map<String, Object>> list = new ArrayList<Map<String, Object>>();Iterator<JSONObject> it = jsonArr.iterator();while (it.hasNext()) {JSONObject JSON = it.next();list.add(parseJSONMap(JSON.toString()));}return list;}/** * json字符串转换为map *@descript *@param jsonStr *@return *@author tony *@date 2015年6月15日 *@version 1.0v */@SuppressWarnings("unchecked")public static Map<String, Object> parseJSONMap(String jsonStr) {Map<String, Object> map = new HashMap<String, Object>();try {//最外层解析  JSONObject json = JSONObject.fromObject(jsonStr);for (Object k : json.keySet()) {Object v = json.get(k);//如果内层还是数组的话,继续解析  if (v instanceof JSONArray) {List<Map<String, Object>> list = new ArrayList<Map<String, Object>>();Iterator<JSONObject> it = ((JSONArray) v).iterator();while (it.hasNext()) {JSONObject JSON = it.next();list.add(parseJSONMap(JSON.toString()));}map.put(k.toString(), list);} else {map.put(k.toString(), v);}}} catch (Exception e) {map.put("exception", jsonStr);}return map;}/** * 根据一个url地址.获取json数据.转换为List *@descript *@param url *@return *@author tony *@date 2015年6月15日 *@version 1.0v */public static List<Map<String, Object>> getListByUrl(String url) {try {//通过HTTP获取JSON数据  InputStream in = new URL(url).openStream();BufferedReader reader = new BufferedReader(new InputStreamReader(in));StringBuilder sb = new StringBuilder();String line;while ((line = reader.readLine()) != null) {sb.append(line);}return parseJSONList(sb.toString());} catch (Exception e) {e.printStackTrace();}return null;}/** * 根据一个url地址.获取json数据.转换为MAP *@descript *@param url *@return *@author tony *@date 2015年6月15日 *@version 1.0v */public static Map<String, Object> getMapByUrl(String url) {try {//通过HTTP获取JSON数据  InputStream in = new URL(url).openStream();BufferedReader reader = new BufferedReader(new InputStreamReader(in));StringBuilder sb = new StringBuilder();String line;while ((line = reader.readLine()) != null) {sb.append(line);}return parseJSONMap(sb.toString());} catch (Exception e) {e.printStackTrace();}return null;}}




package com.util.json;/** * @menu: * @Description: 测试类  * @author:tony * @date: 2016年3月8日 */public class Test {public static void main(String[] args) {String[] intArray = {"1","2","3","4"};System.out.println(JsonUtils.arrayToJson(intArray));System.out.println(intArray.toString());Test.A  a = new Test().new A();System.out.println(JsonUtils.beanToJson(a));}class A{private String nameString;private String age;public String getNameString() {return nameString;}public void setNameString(String nameString) {this.nameString = nameString;}public String getAge() {return age;}public void setAge(String age) {this.age = age;}}}


/** * Copyright (c) 2005-2012 springside.org.cn * * Licensed under the Apache License, Version 2.0 (the "License"); */package com.util.json;import java.io.IOException;import org.apache.commons.lang3.StringUtils;import org.slf4j.Logger;import org.slf4j.LoggerFactory;import com.fasterxml.jackson.annotation.JsonInclude.Include;import com.fasterxml.jackson.core.JsonProcessingException;import com.fasterxml.jackson.databind.DeserializationFeature;import com.fasterxml.jackson.databind.JavaType;import com.fasterxml.jackson.databind.ObjectMapper;import com.fasterxml.jackson.databind.SerializationFeature;import com.fasterxml.jackson.databind.util.JSONPObject;import com.fasterxml.jackson.module.jaxb.JaxbAnnotationModule;/** * 简单封装Jackson,实现JSON String<->Java Object的Mapper. *  * 封装不同的输出风格, 使用不同的builder函数创建实例. *  * @author calvin */public class JsonMapper {private static Logger logger = LoggerFactory.getLogger(JsonMapper.class);private ObjectMapper mapper;public JsonMapper() {this(null);}public JsonMapper(Include include) {mapper = new ObjectMapper();//设置输出时包含属性的风格if (include != null) {mapper.setSerializationInclusion(include);}//设置输入时忽略在JSON字符串中存在但Java对象实际没有的属性mapper.disable(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES);mapper.disable(SerializationFeature.FAIL_ON_EMPTY_BEANS);}/** * 创建只输出非Null且非Empty(如List.isEmpty)的属性到Json字符串的Mapper,建议在外部接口中使用. */public static JsonMapper nonEmptyMapper() {return new JsonMapper(Include.NON_EMPTY);}/** * 创建只输出初始值被改变的属性到Json字符串的Mapper, 最节约的存储方式,建议在内部接口中使用。 */public static JsonMapper nonDefaultMapper() {return new JsonMapper(Include.NON_DEFAULT);}/** * Object可以是POJO,也可以是Collection或数组。 * 如果对象为Null, 返回"null". * 如果集合为空集合, 返回"[]". */public String toJson(Object object) {try {return mapper.writeValueAsString(object);} catch (IOException e) {logger.warn("write to json string error:" + object, e);return null;}}/** * 反序列化POJO或简单Collection如List<String>. *  * 如果JSON字符串为Null或"null"字符串, 返回Null. * 如果JSON字符串为"[]", 返回空集合. *  * 如需反序列化复杂Collection如List<MyBean>, 请使用fromJson(String,JavaType) * @see #fromJson(String, JavaType) */public <T> T fromJson(String jsonString, Class<T> clazz) {if (StringUtils.isEmpty(jsonString)) {return null;}try {return mapper.readValue(jsonString, clazz);} catch (IOException e) {logger.warn("parse json string error:" + jsonString, e);return null;}}/** * 反序列化复杂Collection如List<Bean>, 先使用函數createCollectionType构造类型,然后调用本函数. * @see #createCollectionType(Class, Class...) */@SuppressWarnings("unchecked")public <T> T fromJson(String jsonString, JavaType javaType) {if (StringUtils.isEmpty(jsonString)) {return null;}try {return (T) mapper.readValue(jsonString, javaType);} catch (IOException e) {logger.warn("parse json string error:" + jsonString, e);return null;}}/** * 構造泛型的Collection Type如: * ArrayList<MyBean>, 则调用constructCollectionType(ArrayList.class,MyBean.class) * HashMap<String,MyBean>, 则调用(HashMap.class,String.class, MyBean.class) */@SuppressWarnings("deprecation")public JavaType createCollectionType(Class<?> collectionClass, Class<?>... elementClasses) {return mapper.getTypeFactory().constructParametricType(collectionClass, elementClasses);}/** * 當JSON裡只含有Bean的部分屬性時,更新一個已存在Bean,只覆蓋該部分的屬性. */@SuppressWarnings("unchecked")public <T> T update(String jsonString, T object) {try {return (T) mapper.readerForUpdating(object).readValue(jsonString);} catch (JsonProcessingException e) {logger.warn("update json string:" + jsonString + " to object:" + object + " error.", e);} catch (IOException e) {logger.warn("update json string:" + jsonString + " to object:" + object + " error.", e);}return null;}/** * 輸出JSONP格式數據. */public String toJsonP(String functionName, Object object) {return toJson(new JSONPObject(functionName, object));}/** * 設定是否使用Enum的toString函數來讀寫Enum, * 為False時時使用Enum的name()函數來讀寫Enum, 默認為False. * 注意本函數一定要在Mapper創建後, 所有的讀寫動作之前調用. */public void enableEnumUseToString() {mapper.enable(SerializationFeature.WRITE_ENUMS_USING_TO_STRING);mapper.enable(DeserializationFeature.READ_ENUMS_USING_TO_STRING);}/** * 支持使用Jaxb的Annotation,使得POJO上的annotation不用与Jackson耦合。 * 默认会先查找jaxb的annotation,如果找不到再找jackson的。 */public void enableJaxbAnnotation() {JaxbAnnotationModule module = new JaxbAnnotationModule();mapper.registerModule(module);}/** * 取出Mapper做进一步的设置或使用其他序列化API. */public ObjectMapper getMapper() {return mapper;}}


0 0