一个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,如需转载请自行联系原作者
相关文章
|
2月前
|
Web App开发 JSON JavaScript
SAP UI5 应用程序小技巧 - 一键将 JSON 对象导出成本地 json 文件
SAP UI5 应用程序小技巧 - 一键将 JSON 对象导出成本地 json 文件
25 0
|
3月前
|
JSON 应用服务中间件 nginx
钉钉获取用户token返回的body为空json对象,可能有以下几种情况
钉钉获取用户token返回的body为空json对象,可能有以下几种情况【1月更文挑战第5天】【1月更文挑战第25篇】
33 5
|
28天前
|
存储 JSON 安全
【C++ JSON库 json值的创建手段】深入探究C++中JSON对象定位与操作:从引用到回调函数
【C++ JSON库 json值的创建手段】深入探究C++中JSON对象定位与操作:从引用到回调函数
61 0
|
12天前
|
JavaScript
js 字符串String转对象Object
该代码示例展示了如何将一个以逗号分隔的字符串(`&#39;1.2,2,3,4,5&#39;`)转换为对象数组。通过使用`split(&#39;,&#39;)`分割字符串并`map(parseFloat)`处理每个元素,将字符串转换成浮点数数组,最终得到一个对象数组,其类型为`object`。
|
20天前
|
JSON C语言 数据格式
C语言与lua通过json对象交互
C语言与lua通过json对象交互
16 1
|
21天前
|
JSON 数据格式
Json字符串与QVariantList 对象相互转换
Json字符串与QVariantList 对象相互转换
6 0
|
1月前
|
存储 JSON JavaScript
Python如何解析json对象?
Python如何解析json对象?
25 1
|
2月前
|
SQL JSON Apache
Flink问题之嵌套 json 中string 数组的解析异常如何解决
Apache Flink是由Apache软件基金会开发的开源流处理框架,其核心是用Java和Scala编写的分布式流数据流引擎。本合集提供有关Apache Flink相关技术、使用技巧和最佳实践的资源。
221 1
|
2月前
|
存储 JSON 前端开发
让你的对象变得拗口:JSON.stringify(),我把对象夹进了 JSON 魔法帽!
在 JavaScript 中,JSON.stringify() 是一个内置函数,用于将 JavaScript 对象转换为 JSON 字符串。JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,广泛用于前后端数据传输和存储。本文将详细介绍 JSON.stringify() 的属性、应用场景,并提供一个完整而优雅的实现,处理循环引用、特殊类型(如日期和正则表达式)以及性能相关的问题。同时,我们还将讨论注意事项和相关引用资料。
|
3月前
|
JSON PHP 数据格式