如何使用 th:each 在 Thymeleaf 中迭代 JSONObject 列表
How to Iterate List of JSONObject in Thymeleaf using th:each
这是来自 Spring MVC 控制器的 JSONObject 列表。
List<JSONObject> jsonDataList =
[{"key1":"value1","key2":"value2","key3":"value3","key4":"value4"}, {"key1":"value1","key2":"value2","key3":"value3","key4":"value4"}]
如何使用 th:each 在 Thymeleaf 中迭代 JSONObject 列表?
代码在 HTML 文件中:=>
<tr th:each="data: ${jsonDataList}">
<td align="center"><span th:text="${data.key1}"></span></td> // getting exception here
</tr>
获取异常为:
由以下原因引起:org.attoparser.ParseException:评估 SpringEL 表达式的异常:“data.key1”
这是一种方法,但它做了一些假设:
a) 每个 JSON object 都有相同数量的条目(否则你可能会有一个参差不齐的 table,每行包含不同数量的单元格)。
b) 每个 JSON object 具有相同顺序的相同键(如果您希望 table 具有一致的列标题)。
此外,问题中的示例 JSON 假定所有值都是字符串(value1
等等)。如果您的 JSON 值中有不同类型的 object,那么您将需要确保它们具有所需的字符串表示形式(例如使用 toString()
)。
方法:
<table>
<tr>
<th:block th:each="heading : ${jsonDataList.get(0).names()}">
<th th:text="${heading}"></th>
</th:block>
</tr>
<tr th:each="item : ${jsonDataList}">
<th:block th:each="name : ${item.names()}">
<td th:text="${item.get(name)}"></td>
</th:block>
</tr>
</table>
第一个 <tr>
部分处理读取列表中第一个 object 中的 JSON object 键:
${jsonDataList.get(0).names()}
最后的 <tr>
部分类似,但使用键查找它们的相关值:
${item.get(name)}
结果 HTML 给你一个简单的 table:
<table>
<tr>
<th>key1</th>
<th>key2</th>
<th>key3</th>
<th>key4</th>
</tr>
<tr>
<td>value1</td>
<td>value2</td>
<td>value3</td>
<td>value4</td>
</tr>
<tr>
<td>value1</td>
<td>value2</td>
<td>value3</td>
<td>value4</td>
</tr>
</table>
参考文献:
th:block
标记已记录 here。
可用于 JSONObject
的方法记录在案 here。
这个怎么样?
<tr th:each="data: ${jsonDataList}">
<td align="center"><span th:text="[[${data.key1}]]"></span></td>
</tr>
这是来自 Spring MVC 控制器的 JSONObject 列表。
List<JSONObject> jsonDataList =
[{"key1":"value1","key2":"value2","key3":"value3","key4":"value4"}, {"key1":"value1","key2":"value2","key3":"value3","key4":"value4"}]
如何使用 th:each 在 Thymeleaf 中迭代 JSONObject 列表?
代码在 HTML 文件中:=>
<tr th:each="data: ${jsonDataList}">
<td align="center"><span th:text="${data.key1}"></span></td> // getting exception here
</tr>
获取异常为: 由以下原因引起:org.attoparser.ParseException:评估 SpringEL 表达式的异常:“data.key1”
这是一种方法,但它做了一些假设:
a) 每个 JSON object 都有相同数量的条目(否则你可能会有一个参差不齐的 table,每行包含不同数量的单元格)。
b) 每个 JSON object 具有相同顺序的相同键(如果您希望 table 具有一致的列标题)。
此外,问题中的示例 JSON 假定所有值都是字符串(value1
等等)。如果您的 JSON 值中有不同类型的 object,那么您将需要确保它们具有所需的字符串表示形式(例如使用 toString()
)。
方法:
<table>
<tr>
<th:block th:each="heading : ${jsonDataList.get(0).names()}">
<th th:text="${heading}"></th>
</th:block>
</tr>
<tr th:each="item : ${jsonDataList}">
<th:block th:each="name : ${item.names()}">
<td th:text="${item.get(name)}"></td>
</th:block>
</tr>
</table>
第一个 <tr>
部分处理读取列表中第一个 object 中的 JSON object 键:
${jsonDataList.get(0).names()}
最后的 <tr>
部分类似,但使用键查找它们的相关值:
${item.get(name)}
结果 HTML 给你一个简单的 table:
<table>
<tr>
<th>key1</th>
<th>key2</th>
<th>key3</th>
<th>key4</th>
</tr>
<tr>
<td>value1</td>
<td>value2</td>
<td>value3</td>
<td>value4</td>
</tr>
<tr>
<td>value1</td>
<td>value2</td>
<td>value3</td>
<td>value4</td>
</tr>
</table>
参考文献:
th:block
标记已记录 here。
可用于 JSONObject
的方法记录在案 here。
这个怎么样?
<tr th:each="data: ${jsonDataList}">
<td align="center"><span th:text="[[${data.key1}]]"></span></td>
</tr>