动态解析JSON字符串,将数据存入数据库

我在使用netty时候,由于不同设备发出的JSON字符串不一样,我需要一个动态解析JSON字符串方法去解决,我的思路是先将json字符串通过gson这个类转成map,由于在运行期间无法得知T的具体类型,对这个类的对象进行序列化和反序列化都不能正常进行。Gson通过借助TypeToken类来解决这个问题。

//实例化gson        
Gson gson=new Gson();
//实例化TypeToken
Type type=new TypeToken() {}.getType();
//把json转成map
Map map= gson.fromJson(json,type);

通过迭代器获取map 的所有value值并且赋值给ArrayList存储,因为是动态解析,我无法知道是value什么类型,所以用Object类型,写入数据库时会自动转换

//实例化ArrayList,用来存放value值
ArrayList list = new ArrayList();
//使用Iterator获取map的key与value的集合
Iterator it = map.entrySet().iterator() ;
 while (it.hasNext()){    
        //通过Entry获取key与value   
	    Map.Entry entry = (Map.Entry) it.next() ;
	    //通过getValue获取value值
        Object value = entry.getValue() ;
        //把获取的值通过toString方法添加到ArrayList
	    list.add(value.toString());
    }

写入数据库时,我使用了Sql语句拼凑的方式去解决写入问题,因为我的数据前后的String固定,但是中间的数据数目不确定,但是类型一致,所以我使用if判断进行处理,如果进行改造一下,就是有一张表存数据类型,可以在数据存入数据库前,取出数据表类型,然后传入进来进行判断构造SQL语句方式

    String sql="INSERT INTO "+数据表名+"  VALUES ( null,";
		int i=0;
       	for (Object str : list) {
			if(i>0) {
				if(i>1) {
					if(i>list.size()-2) {
						sql=sql+"\""+str.toString()+"\""+",";
					}else {
						sql= sql+str.toString()+",";
					}
				}else {
					sql=sql+"\""+str.toString()+"\""+",";
				}
			}	
			i++;
	          }
        //因为最后多一个,所以使用subString去掉
		 sql = sql.substring(0,sql.length() - 1);
		 sql=sql+");";
		PreparedStatement pstmt= con.prepareStatement(sql);
		return pstmt.executeUpdate();

 

你可能感兴趣的:(动态解析JSON字符串,将数据存入数据库)