JSON与java互相转换(解决日期问题)

jiang0723 贡献于2011-03-11

作者 江平  创建于2011-03-09 16:01:00   修改者江平  修改于2011-03-09 16:12:00字数3774

文档摘要:json与java互相转换(解决日期问题)JSON即JavaScriptObjectNatation,它是一种轻量级的数据交换格式,非常适合于服务器与JavaScript的交互。本文主要讲解下java和JSON之间的转换,特别是解决互相转换遇到日期问题的情况。
关键词:

json与java互相转换(解决日期问题) 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 List list = new ArrayList();  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 Map map = new HashMap();  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 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如下: /**  * JSON 日期格式处理(java转化为JSON) */  public class JsonDateValueProcessor implements JsonValueProcessor {      private String datePattern = "yyyy-MM-dd";  // 日期格式     /**       * 构造函数      */      public JsonDateValueProcessor() {      }      /**       * 构造函数      * @param format  日期格式      */      public JsonDateValueProcessor(String format) {          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 "";          }      }      public String getDatePattern() {          return datePattern;      }      public void setDatePattern(String pDatePattern) {          datePattern = pDatePattern;      }  }  测试代码: 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类型: 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 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 strlist = JSONArray.toCollection(JSONArray.fromObject(listStr));  for (String str : strlist) {      System.out.println(str);  }  String mapStr = "{\"age\":30,\"name\":\"Michael\",\"baby\":[\"Lucy\",\"Lily\"]}";  Map map = (Map) JSONObject.toBean(JSONObject.fromObject(mapStr), Map.class);  for (Entry entry : map.entrySet()) {      System.out.println(entry.getKey() + " " + entry.getValue());  }  打印结果:              apple             orange             name Michael             age 30             baby [Lucy, Lily]

下载文档到电脑,查找使用更方便

文档的实际排版效果,会与网站的显示效果略有不同!!

需要 15 金币 [ 分享文档获得金币 ] 2 人已下载

下载文档