如何在 HTML table/list 中显示 JSON 数据
How to display JSON data in a HTML table/list
我想使用 Angular 在 table 中显示以下 JSON 对象。 JSON 对象不是静态的(数据可以从服务器更改)
JSON:
{
"This item has 1 value":1,
"Another":30,
"Item with multiple values":[ 1, 2, 3, 4, 5],
"Another with multiple values":[ 45.5, 45.0, 44.7, 45.8, 45.9],
"Single value":2,
}
以及大致应该如何显示数据(虽然不是那么丑!):
| Name | | | | | |
|------------------------------|----|----|----|----|----|
| This item has 1 value | 1| | | | |
| Another | 30| | | | |
| Item with multiple values | 1| 2| 3| 4| 5|
| Another with multiple values |45.5|45.0|44.7|45.8|45.9|
| Single Value | 2| | | | |
列数在设计时未知 - 但可能少于 10。
设计时未知的行数 - 可能大约为几百。 'Name' 在设计时也未知。
如果你能做到,我认为你必须改变你的 json 的形式以获得更均匀的形式,其中你有一个包含值的数组和一个单独的键来单独访问数据和标签:
items = [
{
"label": "This item has 1 value",
"values": [1]
},
{
"label": "Another",
"values": [30]
},
{
"label": "Item with multiple values",
"values": [ 1, 2, 3, 4, 5]
},
{
"label": "Another with multiple values",
"values": [ 45.5, 45.0, 44.7, 45.8, 45.9]
},
{
"label": "Single value",
"values": [2]
}
];
这样您就可以轻松呈现数据:
<table>
<tr>
<th>Name</th>
</tr>
<tr *ngFor="let item of items ">
<td>{{item.label}}</td>
<td *ngFor="let value of item.values">
{{value}}
</td>
</tr>
</table>
仅作为第一个 apprroach。
此方法假设您必须使用您在问题中提供的结构。重构对象应该会更简单。
首先,您应该按键拆分对象。每个键将创建一个 table 行:
<tr *ngFor="let key of Object.keys(your_json_object)">
<td>{{key}}</td>
...
</tr>
对于这些值,我建议您首先将它们全部放入数组中,这样您就可以用相同的方式迭代每一行。
let cloned_object = {};
for (const key in Object.keys(your_json_object))
{
if (your_json_object[key] instanceof Array)
{
cloned_object[key] = your_json_object[key];
}
else
{
cloned_object[key] = [your_json_object[key]];
}
}
return cloned_object;
之后,您可以使用 ngFor 迭代每个值(我在顶部代码中添加了 ...):
<td *ngFor="let value of cloned_object[key]">{{value}}</td>
但正如 Juan Antonio 已经评论过的那样,我建议您重构键名。您应该避免使用像“ ”或“-”这样的字符,因为这会导致问题。
首先,您应该获取 JSON 对象的键以动态迭代数据,然后在值 instanceof an Array. Here is an Angular example 时呈现嵌套值。
我想使用 Angular 在 table 中显示以下 JSON 对象。 JSON 对象不是静态的(数据可以从服务器更改)
JSON:
{
"This item has 1 value":1,
"Another":30,
"Item with multiple values":[ 1, 2, 3, 4, 5],
"Another with multiple values":[ 45.5, 45.0, 44.7, 45.8, 45.9],
"Single value":2,
}
以及大致应该如何显示数据(虽然不是那么丑!):
| Name | | | | | |
|------------------------------|----|----|----|----|----|
| This item has 1 value | 1| | | | |
| Another | 30| | | | |
| Item with multiple values | 1| 2| 3| 4| 5|
| Another with multiple values |45.5|45.0|44.7|45.8|45.9|
| Single Value | 2| | | | |
列数在设计时未知 - 但可能少于 10。 设计时未知的行数 - 可能大约为几百。 'Name' 在设计时也未知。
如果你能做到,我认为你必须改变你的 json 的形式以获得更均匀的形式,其中你有一个包含值的数组和一个单独的键来单独访问数据和标签:
items = [
{
"label": "This item has 1 value",
"values": [1]
},
{
"label": "Another",
"values": [30]
},
{
"label": "Item with multiple values",
"values": [ 1, 2, 3, 4, 5]
},
{
"label": "Another with multiple values",
"values": [ 45.5, 45.0, 44.7, 45.8, 45.9]
},
{
"label": "Single value",
"values": [2]
}
];
这样您就可以轻松呈现数据:
<table>
<tr>
<th>Name</th>
</tr>
<tr *ngFor="let item of items ">
<td>{{item.label}}</td>
<td *ngFor="let value of item.values">
{{value}}
</td>
</tr>
</table>
仅作为第一个 apprroach。
此方法假设您必须使用您在问题中提供的结构。重构对象应该会更简单。
首先,您应该按键拆分对象。每个键将创建一个 table 行:
<tr *ngFor="let key of Object.keys(your_json_object)">
<td>{{key}}</td>
...
</tr>
对于这些值,我建议您首先将它们全部放入数组中,这样您就可以用相同的方式迭代每一行。
let cloned_object = {};
for (const key in Object.keys(your_json_object))
{
if (your_json_object[key] instanceof Array)
{
cloned_object[key] = your_json_object[key];
}
else
{
cloned_object[key] = [your_json_object[key]];
}
}
return cloned_object;
之后,您可以使用 ngFor 迭代每个值(我在顶部代码中添加了 ...):
<td *ngFor="let value of cloned_object[key]">{{value}}</td>
但正如 Juan Antonio 已经评论过的那样,我建议您重构键名。您应该避免使用像“ ”或“-”这样的字符,因为这会导致问题。
首先,您应该获取 JSON 对象的键以动态迭代数据,然后在值 instanceof an Array. Here is an Angular example 时呈现嵌套值。