一个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,如需转载请自行联系原作者
相关文章
|
3月前
|
Web App开发 JSON JavaScript
SAP UI5 应用程序小技巧 - 一键将 JSON 对象导出成本地 json 文件
SAP UI5 应用程序小技巧 - 一键将 JSON 对象导出成本地 json 文件
29 0
|
4月前
|
JSON 应用服务中间件 nginx
钉钉获取用户token返回的body为空json对象,可能有以下几种情况
钉钉获取用户token返回的body为空json对象,可能有以下几种情况【1月更文挑战第5天】【1月更文挑战第25篇】
35 5
|
2月前
|
存储 JSON 安全
【C++ JSON库 json值的创建手段】深入探究C++中JSON对象定位与操作:从引用到回调函数
【C++ JSON库 json值的创建手段】深入探究C++中JSON对象定位与操作:从引用到回调函数
68 0
|
1月前
|
缓存 Java
Java中循环创建String对象的内存管理分析
Java中循环创建String对象的内存管理分析
25 2
|
3天前
|
JSON 数据格式
使用 Gson 将 Map、List等转换为json string
使用 Gson 将 Map、List等转换为json string
11 0
|
4天前
|
Java 开发者
干货总结|快速构造String对象及访问其内部成员的技巧
本文详细解释了String类的底层实现,介绍了构造String对象及其访问其内部成员的技巧。
|
29天前
|
JavaScript
js 字符串String转对象Object
该代码示例展示了如何将一个以逗号分隔的字符串(`&#39;1.2,2,3,4,5&#39;`)转换为对象数组。通过使用`split(&#39;,&#39;)`分割字符串并`map(parseFloat)`处理每个元素,将字符串转换成浮点数数组,最终得到一个对象数组,其类型为`object`。
|
1月前
|
JSON C语言 数据格式
C语言与lua通过json对象交互
C语言与lua通过json对象交互
18 1
|
1月前
|
JSON 数据格式
Json字符串与QVariantList 对象相互转换
Json字符串与QVariantList 对象相互转换
10 0
|
2月前
|
存储 JSON JavaScript
Python如何解析json对象?
Python如何解析json对象?
27 1