You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JSP中展示未知结构JSON文件内容的实现难题求助

动态解析未知结构JSON并在JSP中生成表格

首先,咱们先解决你碰到的PropertyNotFoundException问题——这个异常通常是因为你在JSP里尝试访问HashMap不存在的属性,或是遍历方式出错(比如不小心拿到了HashMap$Node而非完整的Map对象)。接下来咱们一步步搞定动态生成表格的需求:

1. 正确解析JSON数据

首先得把JSON文件内容解析成Java通用集合(比如Map<String, Object>或List<Map<String, Object>>),这里推荐用Jackson或Gson,以Jackson为例:

// 读取JSON文件内容
String jsonContent = new String(Files.readAllBytes(Paths.get("path/to/your/json/file.json")));

ObjectMapper objectMapper = new ObjectMapper();
// 若JSON是数组类型,解析成List<Map>
List<Map<String, Object>> dataList = objectMapper.readValue(jsonContent, new TypeReference<List<Map<String, Object>>>() {});
// 若是单个对象,解析成Map
// Map<String, Object> dataMap = objectMapper.readValue(jsonContent, new TypeReference<Map<String, Object>>() {});

// 将解析后的数据放入request域,供JSP调用
request.setAttribute("dataList", dataList);

2. 在JSP中动态生成表格

因为JSON结构不固定,咱们需要先动态获取表头字段,再遍历数据行:

步骤1:获取表头(以数组类型JSON为例)

如果是数组,取第一个元素的所有key作为表头;如果是单个对象,直接取所有key。

<%@ page import="java.util.Map, java.util.List, java.util.Set" %>
<%
    List<Map<String, Object>> dataList = (List<Map<String, Object>>) request.getAttribute("dataList");
    if (dataList != null && !dataList.isEmpty()) {
        // 获取表头字段集合
        Map<String, Object> firstItem = dataList.get(0);
        request.setAttribute("headers", firstItem.keySet());
    }
%>

步骤2:渲染表格

这里要注意遍历Map时,用entrySet()获取键值对,避免直接访问不存在的属性触发异常:

<% if (dataList != null && !dataList.isEmpty()) { %>
    <table border="1" cellpadding="8" cellspacing="0">
        <!-- 表头行 -->
        <thead>
            <tr>
                <% for (String header : (Set<String>) request.getAttribute("headers")) { %>
                    <th><%= header %></th>
                <% } %>
            </tr>
        </thead>
        <!-- 数据行 -->
        <tbody>
            <% for (Map<String, Object> item : dataList) { %>
                <tr>
                    <% for (Map.Entry<String, Object> entry : item.entrySet()) { %>
                        <td><%= entry.getValue() != null ? entry.getValue().toString() : "" %></td>
                    <% } %>
                </tr>
            <% } %>
        </tbody>
    </table>
<% } else { %>
    <p>No data available</p>
<% } %>

3. 针对你异常问题的说明

你之前遇到的Property 'notes' not found on type java.util.HashMap$Node,大概率是因为你在JSP里写了类似${item.notes},但实际item是HashMap$Node(比如错误地把entrySet()的遍历结果当成了完整Map对象)。按照上面的方式,先遍历dataList里的每个Map,再遍历每个Map的entrySet,就能彻底避免这个问题。

如果你的JSON存在嵌套对象(比如某个value是另一个JSON对象),可以在JSP里加类型判断,递归生成子表格;如果只是扁平结构,上面的代码就完全够用了。

内容的提问来源于stack exchange,提问作者CodeHunter

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 04:00:17