Json格式数据转Html表格

Json数据→包含html语言的字符串

输入数据

数据库可以把下面的Json格式的字符串数据存储起来

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
[
{"group":"主体",
"params":[
{"k":"品牌","v":"1"},
{"k":"型号","v":"2"},
{"k":"颜色","v":"3"},
{"k":"上市年份","v":"4"}]},
{"group":"网络",
"params":[{"k":"4G网络制式","v":"a"},
{"k":"3G网络制式","v":"b"},
{"k":"2G网络制式","v":"c"}]},
{"group":"存储",
"params":[{"k":"机身内存","v":"de"},
{"k":"储存卡类型","v":"ef"}]}
]

需要把json转成List

Json到java对象的转换,工具类:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
package com.SH.utils;

import java.util.List;

import ...

/*工具类,用于把json数据转成需要的java对象
*/
public class JsonUtils {

// 定义jackson对象
private static final ObjectMapper MAPPER = new ObjectMapper();

/**
* 将对象转换成json字符串。
* <p>Title: pojoToJson</p>
* <p>Description: </p>
* @param data
* @return
*/
public static String objectToJson(Object data) {
try {
String string = MAPPER.writeValueAsString(data);
return string;
} catch (JsonProcessingException e) {
e.printStackTrace();
}
return null;
}

/**
* 将json结果集转化为对象
*
* @param jsonData json数据
* @param clazz 对象中的object类型
* @return
*/
public static <T> T jsonToPojo(String jsonData, Class<T> beanType) {
try {
T t = MAPPER.readValue(jsonData, beanType);
return t;
} catch (Exception e) {
e.printStackTrace();
}
return null;
}

/**
* 将json数据转换成pojo对象list
* <p>Title: jsonToList</p>
* <p>Description: </p>
* @param jsonData
* @param beanType
* @return
*/
public static <T>List<T> jsonToList(String jsonData, Class<T> beanType) {
JavaType javaType = MAPPER.getTypeFactory().constructParametricType(List.class, beanType);
try {
List<T> list = MAPPER.readValue(jsonData, javaType);
return list;
} catch (Exception e) {
e.printStackTrace();
}

return null;
}

}

详细参考

拿到数据库里的Json数据后,对其进行转换,两次遍历,利用map拿到value,然后使用StringBuffer生成html格式的字符串。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
@Service
public class SqlJson2JavaString {

public String json2String(String sqlData) {

String jsonData = sqlData;
//生成html
// 把规格参数json数据转换成java对象
List<Map> jsonList = JsonUtils.jsonToList(jsonData, Map.class);
StringBuffer sb = new StringBuffer();
sb.append("<table cellpadding=\"0\" cellspacing=\"1\" width=\"100%\" border=\"0\" class=\"Ptable\">\n");
sb.append(" <tbody>\n");
for(Map m1:jsonList) {
sb.append(" <tr>\n");
sb.append(" <th class=\"tdTitle\" colspan=\"2\">"+m1.get("group")+"</th>\n");
sb.append(" </tr>\n");
List<Map> list2 = (List<Map>) m1.get("params");
for(Map m2:list2) {
sb.append(" <tr>\n");
sb.append(" <td class=\"tdTitle\">"+m2.get("k")+"</td>\n");
sb.append(" <td>"+m2.get("v")+"</td>\n");
sb.append(" </tr>\n");
}
}
sb.append(" </tbody>\n");
sb.append("</table>");
return sb.toString();
}

}

这样,数据库存储中,这种<K,V>对形式的表格数据,可以用json数据保存,可以单表操作。

输出结果

  1. 使用工具类,处理数据库中json格式数据
1
2
3
//将接收到的jsonData,转为map集合
List<Map> jsonList = JsonUtils.jsonToList(jsonData, Map.class);
System.out.println(jsonList);

打印转换的结果:

1
[{group=主体, params=[{k=品牌, v=1}, {k=型号, v=2}, {k=颜色, v=3}, {k=上市年份, v=4}]}, {group=网络, params=[{k=4G网络制式, v=a}, {k=3G网络制式, v=b}, {k=2G网络制式, v=c}]}, {group=存储, params=[{k=机身内存, v=de}, {k=储存卡类型, v=ef}]}]
  1. 使用StringBuffer和遍历取出需要的数据:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
StringBuffer sb = new StringBuffer();
sb.append("<table cellpadding=\"0\" cellspacing=\"1\" width=\"100%\" border=\"0\" class=\"Ptable\">\n");
sb.append(" <tbody>\n");
for(Map m1:jsonList) {
sb.append(" <tr>\n");
sb.append(" <th class=\"tdTitle\" colspan=\"2\">"+m1.get("group")+"</th>\n");
sb.append(" </tr>\n");
List<Map> list2 = (List<Map>) m1.get("params");
for(Map m2:list2) {
sb.append(" <tr>\n");
sb.append(" <td class=\"tdTitle\">"+m2.get("k")+"</td>\n");
sb.append(" <td>"+m2.get("v")+"</td>\n");
sb.append(" </tr>\n");
}
}
sb.append(" </tbody>\n");
sb.append("</table>");
return sb.toString();

最终结果为:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
<table cellpadding="0" cellspacing="1" width="100%" border="0" class="Ptable">
<tbody>
<tr>
<th class="tdTitle" colspan="2">主体</th>
</tr>
<tr>
<td class="tdTitle">品牌</td>
<td>1</td>
</tr>
<tr>
<td class="tdTitle">型号</td>
<td>2</td>
</tr>
<tr>
<td class="tdTitle">颜色</td>
<td>3</td>
</tr>
<tr>
<td class="tdTitle">上市年份</td>
<td>4</td>
</tr>
<tr>
<th class="tdTitle" colspan="2">网络</th>
</tr>
<tr>
<td class="tdTitle">4G网络制式</td>
<td>a</td>
</tr>
<tr>
<td class="tdTitle">3G网络制式</td>
<td>b</td>
</tr>
<tr>
<td class="tdTitle">2G网络制式</td>
<td>c</td>
</tr>
<tr>
<th class="tdTitle" colspan="2">存储</th>
</tr>
<tr>
<td class="tdTitle">机身内存</td>
<td>de</td>
</tr>
<tr>
<td class="tdTitle">储存卡类型</td>
<td>ef</td>
</tr>
</tbody>
</table>