json与对象之间的转换--主要是日期格式问题

一、总结
1、日期格式不能随意,必须固定才能自动转换,无论使用FastJson还是JSONUtils
2、对无法避免的json传人参数类型或格式错误,乐观思想做异常处理

二、代码
1、FastJson:
com.alibaba.fastjson.JSON.parseObject(menuObjectData,Menu.class);


2、JSONUtils:
/**
	 * Description: 把json字符串转换为对象   
	 * @param jsonStr
	 * @param beanClass
	 * @return
	 */
	public static Object jsonStrToObject(String jsonStr, Class beanClass){
		if(null == jsonStr || "".equals(jsonStr.trim())) {
			return null;
		}
		
		JSONObject jsonObject = JSONObject.fromObject(jsonStr);
		jsonConfig.setRootClass(beanClass);	 
		String[] dateFamates = new String[] {"yyyy-MM-dd HH:mm:ss", //可以任意添加日期格式来与json字符串匹配
				"yyyy_MM_dd", 
				"HH_mm_ss", 
				"yyyyMMdd", 
				"yyyyMMddHHmmss", 
				"yyyy年MM月dd日 HH时mm分ss秒",
				"yyyy-MM-dd HH:mm:ss:SSSSSS"};
		JSONUtils.getMorpherRegistry().registerMorpher(new DateMorpher(dateFamates));
		JSONUtils.getMorpherRegistry().registerMorpher(new DateMorpher(dateFamates));
        Object obj=JSONObject.toBean(jsonObject, jsonConfig);
		return obj;
	}

3、json字符串类型校验
/*** 
     * 
     * 获取JSON类型 
     * 判断规则 
     * 判断第一个字母是否为{或[ 如果都不是则不是一个JSON格式的文本 
     * @param str 
     * @return 
     */  
    public static JsonType getJSONType(String jsonStr){  
    	//判断字符串是否为空
    	//TextUtils.isEmpty(CharSequence str),当括号内参数为(null)或者("")时,返回true。
        if(PubUtils.isSEmptyOrNull(jsonStr)){  
            return JsonType.JSON_TYPE_EMPTY;  
        }  
  
        final char[] strChar = jsonStr.substring(0, 1).toCharArray();  
        final char firstChar = strChar[0];  
  
        if(firstChar == '{'){  
            return JsonType.JSON_TYPE_OBJECT;  //对象类型
        }else if(firstChar == '['){   
            return JsonType.JSON_TYPE_ARRAY;   //数组类型  
        }else{  
            return JsonType.JSON_TYPE_ERROR;   //参数非json字符串
        }  
    }

猜你喜欢

转载自jodron.iteye.com/blog/2410878