|
JSON 即 JavaScript Object Natation,它是一種輕量級(jí)的數(shù)據(jù)交換格式,非常適合于服務(wù)器與 JavaScript 的交互。本文主要講解下java和JSON之間的轉(zhuǎn)換,特別是解決互相轉(zhuǎn)換遇到日期問題的情況。 一、需要相關(guān)的jar包: json-lib-xxx.jar ezmorph-xxx.jar commons-httpclient-xxx.jar commons-lang-xxx.jar commons-logging-xxx.jar commons-collections-xxx.jar 上面的包可以從下面的連接下載: http://commons.apache.org/index.html http://json-lib.sourceforge.net http://ezmorph.sourceforge.net 二、java-》JSON 1.List-》JSON view plaincopy to clipboardprint? List<String> list = new ArrayList<String>(); list.add("apple"); list.add("orange"); JSONArray jarr = JSONArray.fromObject(list); System.out.println("list->json:" + jarr.toString()); 打印結(jié)果:list->json:["apple","orange"] 2.Map-》JSON view plaincopy to clipboardprint? Map<String, Object> map = new HashMap<String, Object>(); map.put("name", "Michael"); map.put("baby", new String[] { "Lucy", "Lily" }); map.put("age", 30); JSONObject jo = JSONObject.fromObject(map); System.out.println("map->json:" + jo.toString()); 打印結(jié)果:map->json:{"age":30,"name":"Michael","baby":["Lucy","Lily"]} 3.bean->JSON view plaincopy to clipboardprint? JsonBean bean = new JsonBean(); bean.setName("NewBaby"); bean.setAge(1); bean.setBorn(new Date()); jo = JSONObject.fromObject(bean); System.out.println("bean->json:" + jo.toString()); 打印結(jié)果:bean->json:{"age":1,"born":{"date":10,"day":3,"hours":14,"minutes":14,"month":2,"seconds":1,"time":1268201641228,"timezoneOffset":-480,"year":110},"name":"NewBaby"} 這時(shí)你會(huì)發(fā)現(xiàn)它把bean對(duì)象里的util.Date這個(gè)類型的所有屬性一一轉(zhuǎn)換出來。在實(shí)際運(yùn)用過程中,大多數(shù)情況下我們希望能轉(zhuǎn)化為yyyy-MM-dd這種格式,下面就講一講如何實(shí)現(xiàn): 首先要寫一個(gè)新的類JsonDateValueProcessor如下: view plaincopy to clipboardprint? /** * JSON 日期格式處理(java轉(zhuǎn)化為JSON) * @author Michael sun */ public class JsonDateValueProcessor implements JsonValueProcessor { /** * datePattern */ private String datePattern = "yyyy-MM-dd"; /** * JsonDateValueProcessor */ public JsonDateValueProcessor() { super(); } /** * @param format */ public JsonDateValueProcessor(String format) { super(); this.datePattern = format; } /** * @param value * @param jsonConfig * @return Object */ public Object processArrayValue(Object value, JsonConfig jsonConfig) { return process(value); } /** * @param key * @param value * @param jsonConfig * @return Object */ public Object processObjectValue(String key, Object value, JsonConfig jsonConfig) { return process(value); } /** * process * @param value * @return */ private Object process(Object value) { try { if (value instanceof Date) { SimpleDateFormat sdf = new SimpleDateFormat(datePattern, Locale.UK); return sdf.format((Date) value); } return value == null ? "" : value.toString(); } catch (Exception e) { return ""; } } /** * @return the datePattern */ public String getDatePattern() { return datePattern; } /** * @param pDatePattern the datePattern to set */ public void setDatePattern(String pDatePattern) { datePattern = pDatePattern; } } 測(cè)試代碼: view plaincopy to clipboardprint? JsonBean bean = new JsonBean(); bean.setName("NewBaby"); bean.setAge(1); bean.setBorn(new Date()); JsonConfig jsonConfig = new JsonConfig(); jsonConfig.registerJsonValueProcessor(Date.class,new JsonDateValueProcessor()); JSONObject jo = JSONObject.fromObject(bean, jsonConfig); System.out.println("bean->json:" + jo.toString()); 打印結(jié)果:bean->json:{"age":1,"born":"2010-03-10","name":"NewBaby"} 這就能得到我們想要的結(jié)果了。 三、JSON-》java 1.如何把json的yyyy-MM-dd的轉(zhuǎn)換為Bean中的util.Date類型: view plaincopy to clipboardprint? JSONUtils.getMorpherRegistry().registerMorpher( new DateMorpher(new String[] { "yyyy-MM-dd" })); String jsonStr = "[{\"name\": \"husband\", \"age\": \"26\", \"born\": \"1984-01-12\"},{\"name\": \"wife\", \"age\": \"20\", \"born\": \"1990-05-01\"}]"; Collection<JsonBean> list = JSONArray.toCollection(JSONArray.fromObject(jsonStr), JsonBean.class); //DateUtil.getFormatDate(date,fmtstr)日期轉(zhuǎn)字符串這里不再寫代碼了 for (JsonBean o : list) { System.out.println(DateUtil.getFormatDate(o.getBorn(), "yyyy-MM-dd")); } 打印結(jié)果: 1984-01-12 1990-05-01 2. JSON-》List、 Map view plaincopy to clipboardprint? String listStr = "[\"apple\",\"orange\"]"; Collection<String> strlist = JSONArray.toCollection(JSONArray.fromObject(listStr)); for (String str : strlist) { System.out.println(str); } String mapStr = "{\"age\":30,\"name\":\"Michael\",\"baby\":[\"Lucy\",\"Lily\"]}"; Map<String, Object> map = (Map) JSONObject.toBean(JSONObject .fromObject(mapStr), Map.class); for (Entry<String, Object> entry : map.entrySet()) { System.out.println(entry.getKey() + " " + entry.getValue()); } 打印結(jié)果: apple orange name Michael age 30 baby [Lucy, Lily] |
|
|