Dict.CN 在線詞典, 英語學(xué)習(xí), 在線翻譯

          都市淘沙者

          荔枝FM Everyone can be host

          統(tǒng)計

          留言簿(23)

          積分與排名

          優(yōu)秀學(xué)習(xí)網(wǎng)站

          友情連接

          閱讀排行榜

          評論排行榜

          java與json互相轉(zhuǎn)換(解決日期問題)

          source:
          http://hi.baidu.com/learnfordba/blog/item/0ee6cdfb7d61fb859f5146f8.html


          JSON 即 JavaScript Object Natation,它是一種輕量級的數(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"}
             這時你會發(fā)現(xiàn)它把bean對象里的util.Date這個類型的所有屬性一一轉(zhuǎn)換出來。在實際運用過程中,大多數(shù)情況下我們希望能轉(zhuǎn)化為yyyy
          -MM-dd這種格式,下面就講一講如何實現(xiàn):
             首先要寫一個新的類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;
              }

          }

          測試代碼:

          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]

          posted on 2011-08-14 12:00 都市淘沙者 閱讀(11891) 評論(0)  編輯  收藏 所屬分類: Android/J2ME/Symbian/Jabber

          主站蜘蛛池模板: 高州市| 广东省| 榆社县| 民县| 孙吴县| 康乐县| 洛宁县| 谢通门县| 梅州市| 镇巴县| 苏尼特右旗| 白城市| 华亭县| 米脂县| 海伦市| 莲花县| 洪湖市| 沂南县| 嘉鱼县| 蕉岭县| 怀宁县| 安远县| 长子县| 承德市| 吉木乃县| 万宁市| 建阳市| 彭阳县| 汶川县| 呼玛县| 富平县| 永新县| 施甸县| 博兴县| 满洲里市| 万载县| 洪江市| 天峻县| 武川县| 莱阳市| 濮阳市|