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

如何在Angular HTML中用*ngFor遍历非数组格式的JSON列表

Angular *ngFor 遍历非数组格式JSON的解决方案

问题场景

从WebService拿到的JSON数据里,List是带数字键的对象(不是标准数组),直接用*ngFor遍历展示Code字段完全没效果,需要把所有Code值列出来。

原HTML代码(无效):

<div *ngFor="let item of List">
  {{item.Code}}
</div>

JSON示例:

"List": {
  "0": {
         "Code": "A"
       },
  "1": {
         "Code": "B"
       },
  "2": {
         "Code": "C"
       }
}

问题原因

*ngFor只支持遍历数组类型的数据,当前的List是对象结构,不是数组,所以无法直接遍历。

解决方法

方法一:组件内转成数组

拿到数据后,用Object.values()把List对象转换成数组,之后就能正常用*ngFor了:

// 假设接口返回的原始数据存在response里
this.List = Object.values(response.List);

之后原HTML代码不用改,直接就能渲染出所有Code值。

方法二:模板里直接处理(不改动组件数据)

如果不想修改组件里的数据结构,可以在模板里直接调用Object.values(),但需要先把Object暴露给模板:

  1. 在组件类里加一行:
Object = Object;
  1. 修改模板代码:
<div *ngFor="let item of Object.values(List)">
  {{item.Code}}
</div>

方法三:自定义管道(适合多处复用)

如果多个地方都需要处理这种对象转数组的场景,写个管道更方便:

  1. 生成管道文件:
ng generate pipe objectToArray
  1. 实现管道逻辑:
import { Pipe, PipeTransform } from '@angular/core';

@Pipe({
  name: 'objectToArray'
})
export class ObjectToArrayPipe implements PipeTransform {
  transform(value: any): any[] {
    // 空值处理,避免报错
    return value ? Object.values(value) : [];
  }
}
  1. 在模板里使用管道:
<div *ngFor="let item of List | objectToArray">
  {{item.Code}}
</div>

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 05:45:34