这段时间,一直在拼凑json,解析json存入数据库,弄的我是晕头转向,感觉我可怜的头发又少了500根,自己整理了一套思路,分享一下。
首先要搞明白格式,json其实是一种前台的格式与概念,比较灵活,到了后台可以是对象可以是数组可以是list可以是map。
再详细一点那就是
[]数组--list---JSONArray ,Object--Map---JSONObject ,
1、先说map,格式比较好统一{}在最外侧,{"key值":value}或者是{key值=value}
String jsonString = "{\"key\":\"value\"}"
JSONObject myJson = JSONObject.fromObject(jsonString);
Map m = myJson;
这是网上最常见的一种转map的方法,json的格式这里也是与map一样的,但是这样的写法有的时候会不行,比如value是个数组的时候,会报错,我也不知道为什么,我发现了一种更霸道的方式,可以对这样的格式转换,引包的时候是引的goole的
import com.google.gson.Gson;
String mapData ="{" +
"'bank': [{" +
"'name': 'xxxxx'," +
"'address': 'xxxxx'," +
"'content': 'xxxxx'" +
"}]" +
"}";
Gson gson = new Gson();
Map map = new HashMap();
map = gson.fromJson(mapData, map.getClass());
2、我们再说list,是以[]开始的,里面可以是任何的值,比如[{map1},{map2},{map3}]
当是这样比较简单的结构时,我们就可以直接转换
String json = "[{a},[b},{c}]";
JSONArray jsonArray = JSONArray.fromObject(json);
List list = (List) JSONArray.toCollection(jsonArray);
但是这样转不是万能的,比如遇到这样的格式['key1':[vlaue],'key2':[value]],我确实是就报错了,于是乎,找到了第二种霸道的方法
Object[] obj= JSON.parseObject(jsonData, new TypeReference
目前遇到的所有的json、list、map之间的转换,通过上面的这些就可以完成转换。下面贴上我遇到的所有的其他类型的转换
//list对象转JSON
public JSONArray List2Json(List
//JSON(数组)字符串转换成XML字符串
public String json2xml(JSONArray json) {
String xml = new XMLSerializer().write(json);
}
//XML转JSON
public JSON xml2json(String xml) {
JSON json = new XMLSerializer().read(xml);
}
//JSON转LIST
public List json2list(JSON json) {
JSONArray jsonArray = JSONArray.fromObject(json);
List list = (List) JSONArray.toCollection(jsonArray);
}
//将内容转json
JSON json = new XMLSerializer().read(xml);
//将json转jsonArray
JSONArray jsonArray = JSONArray.fromObject(json);
//将list中的jsonArray转成json对象再转成对应的实体对象
List list = (List) JSONArray.fromObject(jsonArray.toArray());
JSONObject obj = new JSONObject().fromObject(list.get(x));
BdcDjTotalData bdcData =(BdcDjTotalData)JSONObject.toBean(obj,BdcDjTotalData.class);
//resultSet转LIST
public static List resultSetToList(ResultSet rs) throws java.sql.SQLException {
if (rs == null)
return Collections.EMPTY_LIST;
ResultSetMetaData md = rs.getMetaData(); //得到结果集(rs)的结构信息,比如字段数、字段名等
int columnCount = md.getColumnCount(); //返回此 ResultSet 对象中的列数
List list = new ArrayList();
Map rowData = new HashMap();
while (rs.next()) {
rowData = new HashMap(columnCount);
for (int i = 1; i <= columnCount; i++) {
rowData.put(md.getColumnName(i), rs.getObject(i));
}
list.add(rowData);
System.out.println("list:" + list.toString());
}
return list;
}
xml的转换用到的jar包