JSON 날짜 형식 변환

5055 단어 json
기본 JSON은 DATE 형식에 대해 하나의 문자열이 아닌 다중 속성 대상으로 변환되며, 일부 응용 프로그램 처리에 있어서 편리하지 않기 때문에 JsonValueProcessor를 이용하여 날짜의 변환을 실현할 수 있습니다.
기본 형식:
"lastUpdate": {                "date": 29,                "day": 3,                "hours": 14,                "minutes": 46,                "month": 1,                "seconds": 41,                "time": 1330498001000,                "timezoneOffset": -480,                "year": 112            },
변환 후 형식:
"lastUpdate": "2012-02-29 14:46:41"
날짜 프로세서를 사용자 정의하려면:
 
import java.text.SimpleDateFormat;
import java.util.Date;

import net.sf.json.JsonConfig;
import net.sf.json.processors.JsonValueProcessor;

/** 
 * JSON      
 * 
*/
public class DateJsonValueProcessor implements JsonValueProcessor
{
	private String format = "yyyy-MM-dd HH:mm:ss";

	public DateJsonValueProcessor()
	{

	}

	public DateJsonValueProcessor(String format)
	{

		this.format = format;
	}

	public Object processArrayValue(Object value, JsonConfig jsonConfig)
	{

		String[] obj = {};
		if (value instanceof Date[])
		{
			SimpleDateFormat sf = new SimpleDateFormat(format);
			Date[] dates = (Date[]) value;
			obj = new String[dates.length];
			for (int i = 0; i < dates.length; i++)
			{
				obj[i] = sf.format(dates[i]);
			}
		}
		return obj;
	}

	public Object processObjectValue(String key, Object value, JsonConfig jsonConfig)
	{

		if (value instanceof Date)
		{
			String str = new SimpleDateFormat(format).format((Date) value);
			return str;
		}
		return value;
	}

	public String getFormat()
	{

		return format;
	}

	public void setFormat(String format)
	{

		this.format = format;
	}

}

 
변환 호출 코드:
 
	JsonConfig jsonConfig = new JsonConfig();
	jsonConfig.registerJsonValueProcessor(java.util.Date.class, new DateJsonValueProcessor());
	JSONObject jsonObj = JSONObject.fromObject(bean, jsonConfig);
	return jsonObj.toString();

 
2. JAVA 반사 메커니즘을 이용하여 JSON 데이터를 JAVA 대상으로 변환
net.sf.json.JSONObject는 우리에게 toBean 방법을 제공하여 JAVA 대상으로 전환하는 데 사용했고 기능이 더욱 강력했다. 여기서 JDK의 반사 메커니즘을 참고하여 간단한 보조 도구로 사용했다. 일부 데이터 유형은 전환을 해야 하고 수요에 따라 확장을 해야 한다. 여기서 Long과Date 유형을 처리할 수 있다.
단일 JSONObject 대상의 처리만 지원되며 복잡한 JSON 대상, 예를 들어 JSONarray 수조에 대해서는 먼저 훑어보고 JSONObject를 받은 후에 처리할 수 있습니다. 
 
import java.lang.reflect.Method;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.List;

import org.json.JSONObject;
/** 
 *       
 * 
*/
public class AssistantUtil
{

	private static final SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
	
	/**
	 *  JSON     JAVA  
	 * description:      /  
	 */
	public static void setJsonObjData(Object obj, JSONObject data, String[] excludes) throws Exception
	{

		
		//         
		Method[] methods = obj.getClass().getDeclaredMethods();
		if (null != methods)
		{

			for (Method m : methods)
			{

				String methodName = m.getName();

				if (methodName.startsWith("set"))
				{

					methodName = methodName.substring(3);
					//       
					methodName = methodName.substring(0, 1).toLowerCase() + methodName.substring(1);

					if (!methodName.equalsIgnoreCase("class") && !isExistProp(excludes, methodName))
					{

						try
						{
							
							m.invoke(obj, new Object[] { data.get(methodName) });
						}
						catch (IllegalArgumentException e1)
						{
							if(m.getParameterTypes()[0].getName().equals("java.lang.Long")){
								m.invoke(obj, new Object[] { Long.valueOf(data.get(methodName).toString())});
							}else if(m.getParameterTypes()[0].getName().equals("java.util.Date")){
								m.invoke(obj, new Object[] {!data.isNull(methodName)?&nbsp; sdf.parse(data.get(methodName).toString()) : null});							}
						}
						catch (Exception e)
						{
								
						}

					}
				}
			}
		}

	}
	
	private static boolean isExistProp(String[] excludes, String prop)
	{

		if (null != excludes)
		{

			for (String exclude : excludes)
			{
				if (prop.equals(exclude))
				{
					return true;
				}
			}
		}
		return false;
	}

	
	
}

좋은 웹페이지 즐겨찾기