`

项目用到的Json字串到Json对象转换

阅读更多

如下代码:

 

Java代码 
  1. StringBuilder sb = new StringBuilder("[");  
  2. sb.append("{");  
  3. sb.append("cremindTitle:\"小名\",");  
  4. sb.append("cremindDate:\"2012-06-05 19:20:22\",");  
  5. sb.append("cremindRemark:\"阿斯蒂芬\"");  
  6. sb.append("}");  
  7. sb.append("]");  
  8. List<Cremind> clist = JSONArray.toList(JSONArray.fromObject(sb.toString()),  
  9.         Cremind.class);  

在执行中会报错,原因是由于日期类型字串到日期类型Timestamp的转换,解决思路如下:

 

编写一个Morpher类继承自AbstractObjectMorpher

 

Java代码 
  1. class TimeStampMorpher extends AbstractObjectMorpher{  
  2.       
  3.     private Logger LOG = Logger.getLogger(TimeStampMorpher.class);  
  4.       
  5.     private String format ="yyyy-MM-dd hh:mm:ss";  
  6.     public void setFormat(String format) {  
  7.         this.format = format;  
  8.     }  
  9.       
  10.     public TimeStampMorpher() {  
  11.         // TODO Auto-generated constructor stub  
  12.     }  
  13.       
  14.     public TimeStampMorpher(String format) {  
  15.         this.format = format;  
  16.     }  
  17.   
  18.     @Override  
  19.     public Object morph(Object dateStr) {  
  20.         // TODO Auto-generated method stub  
  21.           
  22.         try {         
  23.             java.util.Date date = new SimpleDateFormat(format).parse(dateStr.toString());  
  24.             return new Timestamp(date.getTime());  
  25.         } catch (ParseException e) {  
  26.             // TODO Auto-generated catch block  
  27.             if (LOG.isInfoEnabled())  
  28.                 LOG.info("日期格式可能无效,将采用系统当前日期");  
  29.             e.printStackTrace();  
  30.         }  
  31.         return new  java.sql.Timestamp(System.currentTimeMillis());//返回默认日期       
  32.     }  
  33.   
  34.     @Override  
  35.     public Class morphsTo() {  
  36.         // TODO Auto-generated method stub  
  37.         return Timestamp.class;  
  38.     }  
  39. }  

最终处理版本:

 

 

Java代码 
  1. package com.defshare.foundation.global;  
  2.   
  3. import java.sql.Timestamp;  
  4. import java.text.ParseException;  
  5. import java.text.SimpleDateFormat;  
  6. import java.util.List;  
  7.   
  8. import org.apache.log4j.Logger;  
  9.   
  10. import net.sf.ezmorph.object.AbstractObjectMorpher;  
  11. import net.sf.json.JSONArray;  
  12. import net.sf.json.util.JSONUtils;  
  13.   
  14. class TimeStampMorpher extends AbstractObjectMorpher{  
  15.       
  16.     private Logger LOG = Logger.getLogger(TimeStampMorpher.class);  
  17.       
  18.     private String format ="yyyy-MM-dd hh:mm:ss";  
  19.     public void setFormat(String format) {  
  20.         this.format = format;  
  21.     }  
  22.       
  23.     public TimeStampMorpher() {  
  24.         // TODO Auto-generated constructor stub  
  25.     }  
  26.       
  27.     public TimeStampMorpher(String format) {  
  28.         this.format = format;  
  29.     }  
  30.   
  31.     @Override  
  32.     public Object morph(Object dateStr) {  
  33.         // TODO Auto-generated method stub  
  34.           
  35.         try {         
  36.             java.util.Date date = new SimpleDateFormat(format).parse(dateStr.toString());  
  37.             return new Timestamp(date.getTime());  
  38.         } catch (ParseException e) {  
  39.             // TODO Auto-generated catch block  
  40.             if (LOG.isInfoEnabled())  
  41.                 LOG.info("日期格式可能无效,将采用系统当前日期");  
  42.             e.printStackTrace();  
  43.         }  
  44.         return new  java.sql.Timestamp(System.currentTimeMillis());//返回默认日期       
  45.     }  
  46.   
  47.     @Override  
  48.     public Class morphsTo() {  
  49.         // TODO Auto-generated method stub  
  50.         return Timestamp.class;  
  51.     }  
  52. }  
  53.   
  54. public final class JsonUtil {  
  55.       
  56.     /** 
  57.      * json数组字串到json数组对象<br/> 
  58.      * <pre> 
  59.      *  StringBuilder sb = new StringBuilder("["); 
  60.      *  sb.append("{"); 
  61.      *  sb.append("cremindTitle:\"xiaoqiang\","); 
  62.      *  sb.append("cremindDate:\"2012-06-0519:20:22\","); 
  63.      *  sb.append("cremindRemark:\"xiaoqiangremark\""); 
  64.      *  sb.append("}"); 
  65.      *  sb.append("]"); 
  66.      * </pre> 
  67.      * @param jsonArray 
  68.      * @param classzz 
  69.      */  
  70.     public static final <T>  List<T>  jsonArrayToList(String jsonArray,Class classzz){  
  71.         JSONUtils.getMorpherRegistry().registerMorpher(new TimeStampMorpher());  
  72. //      JSONUtils.getMorpherRegistry().registerMorpher(new TimeStampMorpher());          
  73. //      StringBuilder sb = new StringBuilder("[");  
  74. //      sb.append("{");  
  75. //      sb.append("cremindTitle:\"小名\",");  
  76. //      sb.append("cremindDate:\"2012-06-0519:20:22\",");  
  77. //      sb.append("cremindRemark:\"阿斯蒂芬\"");  
  78. //      sb.append("}");  
  79. //      sb.append("]");  
  80. //      List<Cremind> clist = JSONArray.toList(JSONArray.fromObject(sb.toString()),  
  81. //              Cremind.class);  
  82.           
  83.         return JSONArray.toList(JSONArray.fromObject(jsonArray),classzz);  
  84.     }  
  85.   
  86. }  

项目中表示层Action调用:

 

 

Java代码 
  1. /** 
  2.      * 新增客户 
  3.      * 请求参数: 
  4.      * name:客户名称 
  5.      *  cno:客户编号(跟ID不同) 
  6.      *  customKindId:客户性质ID 
  7.      *  phone:公司电话 
  8.      *  fax:公司传真 
  9.      *  address:客户地址 
  10.      *  siteUrl:公司网址 
  11.      *  cIndustryId:客户行业ID 
  12.      *  cIndustryNum:行业排名 
  13.      *  mainSellProduct:主营产品 
  14.      *  cbuildDate:成立时间 
  15.      *  clevelId:客户级别ID 
  16.      *  signTag:签约标志 
  17.      *  remind:[{ 
  18.      *  cremindTitle:提醒名称 
  19.      *  cremindDate:提醒日期 
  20.      *  cremindRemark:备注 
  21.      *  },{},{}] 
  22.      * @return 
  23.      * @throws Exception 
  24.      */  
  25.     public String addCustomer() throws Exception{  
  26.         return super.executeAction(new IExecuteActionCallback() {  
  27.               
  28.             public String execute(BaseJSONAction baseJsonAction) {  
  29.                 Customer cst = new Customer();  
  30.                 bindParam2Bean(cst);//绑定请求参数到对象  
  31.                 //处理特殊参数的绑定  
  32.                 //处理客户性质ID  
  33.                 String customKindId = getParam("customKindId").toString();  
  34.                 if (!StringUtils.isBlank(customKindId)){  
  35.                     CustomKind ck = new CustomKind();  
  36.                     ck.setCustomKindId(Integer.valueOf(customKindId));  
  37.                     cst.setCustomKind(ck);                    
  38.                 }  
  39.                   
  40.                 //处理客户行业  
  41.                 String cIndustryId = getParam("cIndustryId").toString();  
  42.                 if(!StringUtils.isBlank(cIndustryId)){  
  43.                     Cindustry cs = new Cindustry();  
  44.                     cs.setCindustryId(Integer.valueOf(cIndustryId));  
  45.                     cst.setCindustry(cs);  
  46.                 }  
  47.                 //处理客户级别  
  48.                 String clevelId = getParam("clevelId").toString();  
  49.                 if(!StringUtils.isBlank(clevelId)){  
  50.                     Clevel cl = new Clevel();  
  51.                     cl.setClevelId(Integer.valueOf(clevelId));  
  52.                     cst.setClevel(cl);  
  53.                 }  
  54.                   
  55.                 //處理註冊時間  
  56.                 cst.setCregArchDate(DateUtil.getTimestamp());  
  57.                 if (cst.getCbuildDate()==null)  
  58.                     cst.setCbuildDate(DateUtil.getTimestamp());  
  59.                   
  60.                 //處理所屬員工  
  61.                 Emp emp = getCurrentUser();  
  62.                 if (emp!=null)  
  63.                     cst.setEmp(emp);  
  64.                                   
  65.                   
  66.                 <span style="color: #3366ff;">//处理提醒  
  67.                 String remind = getParam("remind").toString();  
  68.                 //反序列化JSON字符串到对象数组  
  69.                 //List<Cremind> clist = JSONArray.toList(JSONArray.fromObject(remind),Cremind.class);  
  70.                 List<Cremind> clist = JsonUtil.jsonArrayToList(remind, Cremind.class);</span>  
  71.                 //设置客户提醒  
  72.                 cst.setCreminds(new HashSet(clist));  
  73.                   
  74.                 cstService.addCustomer(cst);                  
  75.                   
  76.                 return SUCCESS;  
  77.             }  
  78.         });  
  79.     }  

 

2
5
分享到:
评论
1 楼 nj_first 2012-07-05  
何不使用jackson这个字符串转对象的工具包,很方便的

相关推荐

    JSON模块修改版.rar

    在易语言中,使用这样的JSON模块可以非常方便地将数据转换为JSON字符串,然后通过网络发送或保存到文件中;也可以从接收到的JSON字符串或文件中解析数据,将其转化为易语言的数据结构。例如,你可以创建一个JSON对象...

    JSON解析模块2.0.rar

    2. JSON序列化:相反地,该模块也可以将易语言的数据结构转换为JSON格式的字符串,以便在网络上传输或存储到文件中。这在数据交换和持久化存储时非常有用。 3. 错误处理:在解析过程中,如果遇到无效的JSON格式,...

    protobuf根据DebugString输出字串反解pb对象的实例(C++)

    仔细观察发现输出并不是标准json格式,也就是说基于json→pb的路子是行不通的了。难道就没有其他办法了吗?答案是有的,本实例就提供了转换方法。使用过程中如果有什么问题可以私信博主,我看到后会第一时间解答。

    Python-biglistofnaughtystrings淘气字串大列表收集了用户输入时经常出错的字串包含py脚本和JSON格式数据

    项目提供的JSON文件包含了可能引起解析错误或导致不安全的JSON数据,如嵌套过深的结构、包含特殊字符的键值对等,这些都可以用于测试JSON解析库的健壮性。 通过使用"big-list-of-naughty-strings"项目,开发者可以...

    C#Socket 封装了Tcp/Udp传输字串、文件、对象

    网络通信 Tcp/Udp 传输字串、文件、对象 Tcp粘包、半包 1.封装了Tcp/Udp传输字串、文件、对象的细节,处理了Tcp粘包问题 2.测试代码设计原始Socket、TcpListener、TcpClient、UdpClient的使用 3.测试代码包括一个...

    kifuparser:将将棋的棋谱(游戏记录)数据格式转换为JSON

    将kif,ki2和csa数据格式转换为JSON或JavaScript对象 JSON的Kifu格式 { 标头[对象] 日期[对象] 开始[字符串] 结束[字符串] 网站[字串] 差点[数字] 标题[string] 动作[个数] 事件[字符串] 开头[string] ...

    JSON-handle

    JSON-handle是一款对JSON格式的内容进行浏览和编辑,以树形图样式展现JSON文档,并可实时编辑,美化整个JSON字串,使JSON结构一目了然,还能对JSON中的对象进行展开及收起,可以大大提升开发效率 。

    SqlServer将查询结果转换为XML和JSON

    转换过程涉及到对XML节点的遍历,解析键值对,然后构建JSON字符串。具体实现涉及复杂的字符串操作,包括查找节点开始和结束标记,提取字段名和值等。 要将查询结果直接转换为JSON,你可以使用`FOR JSON`子句,例如...

    StringNumber:JSON.parse stringify将大数字转换为字符串

    字串号码JSON.parse / stringify将大数字转换为字符串。 基于 。 尽管大多数JSON解析器都假定数字值具有与IEEE 754 double相同的精度限制,但JSON规范并未说明任何数字精度。 十进制(可选地,科学的)表示法中的...

    字串转换(源码)

    将原始字串转换为Unicode格式的过程,通常涉及到字符编码的解析。例如,如果一个字串是用ASCII编码的,我们需要将每个字符转换为其在Unicode中的等价值。在Python中,可以使用`encode()`函数,指定'ascii'作为编码...

    进制及字串转换

    进制及字串转换是计算机科学中的基础概念,它们在编程和数据处理中扮演着重要角色。本程序基于Dephi开发,集成了多种进制转换和字符串操作功能,旨在为用户提供方便的操作体验。 首先,我们要了解什么是进制。进制...

    Android利用Gson解析嵌套多层的Json的简单方法

    总之,Android开发中利用Gson解析嵌套多层的JSON数据主要分为两个步骤:一是创建与JSON结构对应的Java Bean类,二是使用Gson的`fromJson()`方法将JSON字符串转化为Java对象。理解这一过程对于处理复杂数据交换至关...

    html转C语言字串或数组工具

    2. **字串转换**:将HTML元素及其属性转化为C语言字符串,方便在代码中直接引用或处理。 3. **数组生成**:将HTML内容转换为C语言数组,如字符数组或结构体数组,便于内存管理和操作。 4. **图片转换**:描述中提到...

    Python解析json之ValueError: Expecting property name enclosed in double quotes: line 1 column 2(char 1)

    在Python中提供了json包来方便快捷的解析json字串的转换过程,但是碰到了一个比较奇怪的问题,就是不太正确的json串如何来解析? 1. 问题的提出 今天在处理一个http请求的响应json之时,基于python进行解析,碰到了...

    JavaScript对象和字串之间的转换实例探讨

    在JavaScript中,对象和字符串之间的转换是编程中常见的操作,特别是在处理JSON数据时。本文将深入探讨这两种数据类型的转换方法,并通过实例来解析转换过程。 首先,我们来看JavaScript对象的定义方式。对象可以...

    android字串的拆分问题

    本文将深入探讨“android字串的拆分问题”,并提供相关的解决方案。 字符串拆分是处理文本数据时的一项基本操作。在Java和Android中,我们可以使用多种方法来拆分字符串。主要的方法有两种:`split()` 和 `Pattern....

    android字串导出工具

    导出android代码内的字串到excel,便于翻译。 导出后的格式是: key 英文 待翻译的语言 导出时,会自动忽略不必要的字串。比如注释里带not translate,或者属性里有translate="false"的字串。 ------------ ./string...

    golang json[]

    golang 的json库利用反射机制,能很方便处理结构体与json字串之间的转换。  json数组格式: [ { riskType: [ 2, 3 ], uid: 74f6881b-6e2d-4bf5-8671-f2dedd4b226c, level: 4, ip: 110.213.0.151...

    C#字串与Unicode互相转换方法

    ### C# 字串与 Unicode 互相转换方法 在软件开发过程中,经常需要处理不同编码格式的数据,其中 Unicode 是一种常见的字符编码方式,它为每个字符分配一个唯一的数字(即码点),支持世界上几乎所有的书写系统。C# ...

Global site tag (gtag.js) - Google Analytics