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

如何在Angular中正确显示JSON的键与值,修复keyvalue管道返回数字索引问题

问题根因

你当前从接口拿到的Markets是对象数组结构,数组的每个元素都是仅包含1个键值对的独立平台对象。直接对数组使用keyvalue管道时,Angular会将其识别为普通数组处理,返回的键自然就是数组的数字索引,而非你期望的TMALL、JD这类平台名称。

解决方案

提供两种可直接落地的实现方案:

  • 方案1:模板层双层遍历,无需修改TS业务代码
    用两层*ngFor分别遍历数组、数组内的单个对象即可拿到正确键值,还可继续遍历分类列表做展示:
    <!-- 第一层遍历数组中的每个平台对象 -->
    <ng-container *ngFor="let marketItem of Markets">
      <!-- 第二层遍历单个平台对象的键值对 -->
      <ng-container *ngFor="let market of marketItem | keyvalue">
        <p>平台名称:{{market.key}}</p>
        <p>平台分类:</p>
        <ul>
          <li *ngFor="let category of market.value">{{category}}</li>
        </ul>
      </ng-container>
    </ng-container>
    
  • 方案2:TS层预处理数据(更推荐,渲染性能更高)
    先把原数组结构合并为单个键值对对象,后续模板只需要一层遍历即可:
    // 接口返回原始数据后做转换
    this.Markets = 原始接口返回的数组.reduce((res, item) => {
      const platformKey = Object.keys(item)[0];
      res[platformKey] = item[platformKey];
      return res;
    }, {});
    
    预处理完成后,模板直接用你原有的写法就能得到正确结果:
    *ngFor="let m of Markets | keyvalue">{{m.key}} {{m.value | json}}
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 19:54:03