Dict.CN 在線詞典, 英語學習, 在線翻譯

          都市淘沙者

          荔枝FM Everyone can be host

          統計

          留言簿(23)

          積分與排名

          優秀學習網站

          友情連接

          閱讀排行榜

          評論排行榜

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

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


          JSON 即 JavaScript Object Natation,它是一種輕量級的數據交換格式,非常適合于服務器與 JavaScript 的交互。本文主要講解下java和JSON之間的轉換,特別是解決互相轉換遇到日期問題的情況。
              一、需要相關的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());

              打印結果: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());

              打印結果: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());

          打印結果: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"}
             這時你會發現它把bean對象里的util.Date這個類型的所有屬性一一轉換出來。在實際運用過程中,大多數情況下我們希望能轉化為yyyy
          -MM-dd這種格式,下面就講一講如何實現:
             首先要寫一個新的類JsonDateValueProcessor如下:

          view plaincopy to clipboardprint
          ?
          /**
          * JSON 日期格式處理(java轉化為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());

          打印結果:bean
          ->json:{"age":1,"born":"2010-03-10","name":"NewBaby"}
          這就能得到我們想要的結果了。

          三、JSON
          -》java
          1.如何把json的yyyy-MM-dd的轉換為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)日期轉字符串這里不再寫代碼了
          for (JsonBean o : list) {
             System.out.println(DateUtil.getFormatDate(o.getBorn(), 
          "yyyy-MM-dd"));
          }

          打印結果:
                     
          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());
          }

          打印結果:
                      apple
                     orange
                     name Michael
                     age 
          30
                     baby [Lucy, Lily]

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

          主站蜘蛛池模板: 棋牌| 芜湖县| 铁岭县| 南江县| 巍山| 北票市| 荆州市| 安平县| 云浮市| 交城县| 清水河县| 合江县| 普格县| 比如县| 冕宁县| 南涧| 越西县| 浦县| 洞头县| 霍州市| 台中市| 乌拉特后旗| 仪陇县| 辉县市| 嘉峪关市| 民勤县| 四子王旗| 湛江市| 静海县| 绥宁县| 东阳市| 甘德县| 梧州市| 绿春县| 肃南| 绥滨县| 嵊泗县| 鹤壁市| 吉首市| 西林县| 汝南县|