对普通对象的JSON封装

JSONWrapper作用:普通java对象--->JSON--->String

 普通java对象支持类型:1)基本类型 2)Date、BigDecimal 3)Map、Iterable 4)JSON本身类型

对自定义类,使用其toString()值。

/**
 * 
 * @author zfzheng
 */
public class JSONWrapper implements JSON{
 private static Log LOG = LogFactory.getLog(JSONWrapper.class);
 
 private JSON json=null;
 
 public JSONWrapper(Object ... arguments){
  json=convert2JSONObject(arguments);
 }
 
 private JSON convert2JSONObject(Object ... arguments){
  if(arguments.length==0){  
   //返回空array较符合用意
   return new JSONArray();//return null;
  }else if(arguments.length==1){
   Object obj=convert2JSONSupportedObject(arguments[0]);
   if(obj instanceof JSON){
    return (JSON)obj;
   }else{
    JSONArray array=new JSONArray();
    array.add(obj);
    return array;
   }
  }else{
   JSONArray array=new JSONArray();
   for(Object obj:arguments){
    array.add(convert2JSONSupportedObject(obj));
   }
   return array;
  }
 }
 
 @SuppressWarnings("unchecked")
 private Object convert2JSONSupportedObject(Object obj){
  if(obj==null){
   return JSONNull.getInstance();
  }else if(obj instanceof JSON){
   return (JSON)obj;
  }else if(obj.getClass().isArray()){
   return convert2JSONObject((Object[])obj);
  }else{
   //转换
   if(JSONUtils.isSupportSimpleType(obj.getClass())){
    return obj;
   }else if(obj instanceof Map){
    JSONObject jo=new JSONObject();
    Map m=(Map)obj;
    for(Object k:m.keySet()){
     jo.put(String.valueOf(k), convert2JSONSupportedObject(m.get(k)));
    }
    return jo;
   }else if(obj instanceof Iterable){
    JSONArray array=new JSONArray();
    Iterable iterable=(Iterable)obj;
    for(Iterator iter=iterable.iterator();iter.hasNext();){
     array.add(convert2JSONSupportedObject(iter.next()));
    }
    return array;
   }else{
    //未明确的支持,使用其toString值。
    return obj.toString();
   }   
  }
 }
 
 public String toString(){
  return String.valueOf(json);
 }

 public void write(Writer writer) throws IOException {
  if(json!=null){
   json.write(writer);
  }
 }
 
 public static void main(String[] args) {
  class A{
   private String name;
   public A(String name){
    this.name=name;
   }
   public String toString(){
    return name;
   }
  }
  Map<String,Object> m=new HashMap<String,Object>();
  m.put("KEY1", "11111111");
  m.put("KEY2", "22222222");
  List<Integer> list=new ArrayList<Integer>();
  list.add(1);
  list.add(2);
  m.put("LIST", list);
  m.put("DEFAULT", new A("aaaaa"));
  System.out.println(new JSONWrapper("vv",m,null,"[]{},'//"
///:"));
  System.out.println(new JSONWrapper());
 }
}

执行输出

["vv",{"DEFAULT":"aaaaa","KEY1":"11111111","KEY2":"22222222","LIST":[1,2]},"null","[]{},'//"///:"]
[]

JSONUtils

 

public   class  JSONUtils  {
 
private static final class InternalResource {
  
private static Pattern FUNCTION_HEADER_MATCHER;
  
private static final String FUNCTION_HEADER_PATTERN = "^function[ ]?/(.*/)$";
  
private static Pattern FUNCTION_MACTHER;
  
private static Pattern FUNCTION_PARAMS_MATCHER;
  
private static final String FUNCTION_PARAMS_PATTERN = "^function[ ]?/((.*?)/)$";
  
private static final String FUNCTION_PATTERN = "^function[ ]?/(.*/)[ ]?/{.*/}$";

  
public static final Set<Class<?>> supportTypes;
  
static {
   supportTypes 
= new HashSet<Class<?>>();
   supportTypes.add(Character.
class);
   supportTypes.add(Byte.
class);
   supportTypes.add(Short.
class);
   supportTypes.add(Integer.
class);
   supportTypes.add(Long.
class);
   supportTypes.add(Date.
class);
   supportTypes.add(java.sql.Date.
class);
   supportTypes.add(BigInteger.
class);
   supportTypes.add(BigDecimal.
class);
   supportTypes.add(String.
class);
   supportTypes.add(Boolean.
class);

   supportTypes.add(JSONArray.
class);
   supportTypes.add(JSONNull.
class);
   supportTypes.add(JSONObject.
class);
   supportTypes.add(JSONFunction.
class);

   FUNCTION_HEADER_MATCHER 
= Pattern.compile(FUNCTION_HEADER_PATTERN);
   FUNCTION_PARAMS_MATCHER 
= Pattern.compile(FUNCTION_PARAMS_PATTERN);
   FUNCTION_MACTHER 
= Pattern.compile(FUNCTION_PATTERN);
  }

 }


 
public static boolean isSupportSimpleType(Class<?> type) {
  
return InternalResource.supportTypes.contains(type);
 }


 
/**
  * 将字符串转换为JSON对象
  
*/

 
public static JSON parse(String source) {
  
if (source == nullreturn JSONNull.getInstance();
  source 
= source.trim();
  
if (source.length() == 0return JSONNull.getInstance();

  JSONTokener tokener 
= new JSONTokener(source);
  
char firstToken = tokener.nextClean();

  
if (firstToken == '{'{
   tokener.back();
   
return new JSONObject(tokener);
  }


  
if (firstToken == '['{
   tokener.back();
   
return new JSONArray(tokener);
  }


  
if ("null".equals(source.trim())) {
   
return JSONNull.getInstance();
  }


  
throw new JSONException("syntax error. source : " + source + "");
 }


 
/**
  * 对象转换为JSON字符串
  
*/

 
public static String toJSONString(Date date) {
  
if (date == nullreturn "null";

  
// return ""//Date(" + date.getTime() + ")//"";
  return "new Date(" + date.getTime() + ")";
 }


 
/**
  * 对象转换为JSON字符串
  * 
  * 
@param date
  * 
@return
  
*/

 
public static String toJSONString(JSON json) {
  
if (json == nullreturn "null";

  
return json.toString();
 }


 
/**
  * 如果是日期格式,则转为日期,否则返回原值
  
*/

 
public static Object parseDateIfMatch(String value) {
  
if (value == nullreturn null;

  
int len = value.length();

  
if (len <= 11return value;

  
if (value.startsWith("new Date("&& value.endsWith(")")) {
   String tmp 
= value.substring(9, len - 1);
   
long millis = Long.parseLong(tmp);

   
return new Date(millis);
  }


  
if (value.startsWith("//Date("&& value.endsWith(")//")) {
   String tmp 
= value.substring(7, len - 3);
   
long millis = Long.parseLong(tmp);

   
return new Date(millis);
  }


  
return value;
 }


 
public static boolean isFunctionHeader(Object obj) {
  
if (obj instanceof String) {
   String str 
= (String) obj;
   
return InternalResource.FUNCTION_HEADER_MATCHER.matcher(str).matches();
  }

  
return false;
 }


 
public static String getFunctionParams(String function) {
  Matcher matcher 
= InternalResource.FUNCTION_PARAMS_MATCHER.matcher(function);
  
if (matcher.matches()) {
   
return matcher.group(1);
  }

  
return "";
 }


 
public static boolean isFunction(Object obj) {
  
if (obj instanceof String) {
   String str 
= (String) obj;
   
return InternalResource.FUNCTION_MACTHER.matcher(str).matches();
  }

  
if (obj instanceof JSONFunction) {
   
return true;
  }

  
return false;
 }


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值