一个json string和泛型对象转换的经典实例-阿里云开发者社区

开发者社区> 科技小先锋> 正文

一个json string和泛型对象转换的经典实例

简介:
+关注继续查看
花了我三个多小时(java还需要努力啊);
只有我自己看得懂,哈哈!!!!
/**elbert.chenh寫於2010年1月5日晚
  * 实现如下功能
  * 1.将用户传递的个性化的jsonstr队列转换为标准化的统一的jsonstr队列
  *   如队列中的元素{\"taskId\":\"t01\",\"sceneId\":\"s01\",\"caseId\":\"cs01\",\"SYNOPSIS\":\"p1\",\"id\":1,\"cpu\":\"cpu01\"}
  *   转化为标准化元素{\"taskId\":\"t01\",\"sceneId\":\"s01\",\"caseId\":\"cs01\",\"param1\":\"p1\",\"id\":1,\"param10\":\"cpu01\"}
  * 2.将队列中的jsonstr转换为对应的类实例
  * 3.调用插入数据库函数将结果插入数据库中 
  * @param jstrCaseLog
  */
 public void insertCaseLog(String jstrCaseLog)
 {
  List<Object> ls = com.alisoft.testplat.help.JsonFunc.fromJSON(
    jstrCaseLog, ArrayList.class);
  //取得数据库中所有的LogParam
  TestCaseService tss = new TestCaseService();
  List<LogParam> lp = tss.getLogParamList();
  List<LinkedHashMap> lstmp = new ArrayList<LinkedHashMap>();
  LinkedHashMap map = new LinkedHashMap();
  for (int i = 0; i < ls.size(); i++) {
   map = (LinkedHashMap) ls.get(i);
   for (int j = 0; j < map.keySet().size(); j++) {
    //使用Key去寻找是哪个Param,如果不是那么就返回自己
    for(int k = 0; k < lp.size(); k++)
    {
     LogParam tmplp = lp.get(k);
     //如果传入的参数别名=某条记录的参数别名,那么替换为该参数实际名称
     if(map.keySet().toArray()[j].toString().toLowerCase().equals(tmplp.getParamAlias().toLowerCase()))
     {
      Object value = map.get(map.keySet().toArray()[j]);
      map.remove(map.keySet().toArray()[j]);
      map.put(tmplp.getParamName().toLowerCase(), value);
     }
    }
   }
   lstmp.add(map); 
  }
  String tempstr = com.alisoft.testplat.help.JsonFunc.toJSON(lstmp);
  List<Object> deslp = com.alisoft.testplat.help.JsonFunc.fromJSON(tempstr, ArrayList.class);
  for(int index = 0; index < deslp.size(); index++)
  {
   String cp = getListNode(deslp,index);
   CaseLog tlp = com.alisoft.testplat.help.JsonFunc.fromJSON(cp, CaseLog.class);
   CaseLogDao.InsertCaseLog(tlp);
  }
 }
 
 public String getListNode(List<Object> ls,int index)
 {
  StringBuilder desstr = new StringBuilder("{");
  LinkedHashMap map = new LinkedHashMap();
   map = (LinkedHashMap) ls.get(index);
   for (int j = 0; j < map.keySet().size(); j++) {
     //如果传入的参数别名=某条记录的参数别名,那么替换为该参数实际名臣
    Object key = map.keySet().toArray()[j];
    Object value = map.get(map.keySet().toArray()[j]);
    if(j < (map.keySet().size()-1))
    {
     if (value != null)
     {
      desstr.append("\"").append(key.toString()).append("\":").append("\"").append(value.toString()).append("\"").append(",");
     }
     else
     {
      desstr.append("\"").append(key.toString()).append("\":").append("null").append(",");
     }
    }
    else
    { 
     if (value != null)
     {
      desstr.append("\"").append(key.toString()).append("\":").append("\"").append(value.toString()).append("\"").append("}");
     }
     else
     {
      desstr.append("\"").append(key.toString()).append("\":").append("null").append("}");
     }
    }
   }
  System.out.println(desstr.toString());
  return desstr.toString();
 }
 public static String toJSON(Object obj) {
       StringWriter writer = new StringWriter();
       try {
          mapper.writeValue(writer, obj);
       } catch (JsonGenerationException e) {
          throw new RuntimeException(e);
       } catch (JsonMappingException e) {
          throw new RuntimeException(e);
       } catch (IOException e) {
          throw new RuntimeException(e);
       }
       return writer.toString();
 }
 
 public static <T> T fromJSON(String json, Class<T> clazz) {
       ObjectMapper mapper = new ObjectMapper();
       try {
          return mapper.readValue(json, clazz);
       } catch (JsonParseException e) {
          throw new RuntimeException(e);
       } catch (JsonMappingException e) {
          throw new RuntimeException(e);
       } catch (IOException e) {
          throw new RuntimeException(e);
       }
    }
 
 本文转自elbertchen 51CTO博客,原文链接:http://blog.51cto.com/linkyou/282606,如需转载请自行联系原作者

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
OceanBase数据库漫谈
从开发视角、运维视角、数据拆分漫谈OceanBase
15 0
上云第一课第一期部署MySQL数据库
主要讲述数据的部署以及使用
11 0
node+mysql+express接口开发数据库连接池
node+mysql+express接口开发数据库连接池
17 0
node+express controller
Node + Express Controller
13 0
教育培训机构使用阿里云无影桌面优缺点
配置灵活,GPU满足设计产品线,价格低廉,随开随用。
25 0
工商银行实时大数据平台建设历程及展望
中国工商银行大数据平台负责人袁一在 FFA 2021 的分享
26 0
【mockito】单元测试之mockito简单使用
项目使用的是springmvc+mybatis 开发; mock包为 mockito-all;虽然也引用了powermock,但截至目前,还未使用到;如果使用到后续再补相关笔记。
14 0
Node + Express + MySQL 接口开发完整案例
Node + Express + MySQL 接口开发完整案例
20 0
浅谈我对DDD领域驱动设计的理解
DDD的全称为Domain-driven Design,即领域驱动设计。下面我从领域、问题域、领域模型、设计、驱动这几个词语的含义和联系的角度去阐述DDD是如何融入到我们平时的软件开发初期阶段的。要理解什么是领域驱动设计,首先要理解什么是领域,什么是设计,还有驱动是什么意思,什么驱动什么。
12 0
ACP实战特训营RDS(DAY3)
要点记录 1. PolarDB的基本概念 1.1、对比单机数据库优势有哪些:简单易用、极致性能、降低成本、海量存储、安全可靠、快速弹性 1.2 、单机数据库容量瓶颈-单机数据库扩展困难-数据库使用成本过高-分布式数据库应用开发繁琐 2. PolarDB产品系列:集群版-单节点-历史库-多主架构 2.1、集群:一个集群包含一个主节点和多个读节点,最多16个节点,即一个主节点和15个只读节点 2.2、地域:是指物理的数据中心,一般情况下,PolarDB集群应该和ECS实例位于同一地域,以实现最高的访问性能
13 0
6967
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
《2021云上架构与运维峰会演讲合集》
立即下载
《零基础CSS入门教程》
立即下载
《零基础HTML入门教程》
立即下载