从 JSON 实例化对象数组 [重复]

Posted

技术标签:

【中文标题】从 JSON 实例化对象数组 [重复]【英文标题】:Instantiating array of objects from JSON [duplicate] 【发布时间】:2016-03-28 20:37:12 【问题描述】:

我对 Typescript 很陌生,所以我想这是一个非常愚蠢的问题,但我有一个 JSON 对象数组,我想映射到 Panel 类。

当我的PanelsService 类被实例化时,我还想实例化我的Panel 对象数组。

到目前为止我得到了什么:

PanelsService.ts

import Panel from './panel';

declare var _: any;

export class PanelsService 

  public panels: Array<Panel>;
  public customPanels: Array<Panel>;

  constructor(private _http:Http) 
    this.panels = window['panels']['views'];
  

由此,我的Panels 都没有被实例化(我在构造函数中有一个日志)。显然我可以遍历window['panels']['views'] 并执行类似this.panels.push(new Panel(myPanel) 的操作,但似乎必须有更好的方法。

FWIW,我的 Panel 类只是一个属性负载和一个构造函数。

【问题讨论】:

仅供参考:您可以使用较短的 Panel[] 代替 Array&lt;Panel&gt; 【参考方案1】:

如果window['panels']['views'] 中的数据是一个Panel 数组,你只需要强制转换它就可以让TypeScript 满意:

this.panels = <Panel[]>(window['panels']['views']);

这不会改变生成的 javascript 的任何内容,但会编译。 请注意,它永远不会调用 Panel 构造函数。 window['panels']['views'] 中的对象已经实例化,所以它只是一个演员表。

【讨论】:

如果我想从 JSON 实例化一堆类,除了循环和推送之外,是否缺少某种模式?这似乎是一个相当常见的用例 - 例如,当我实例化类时,我想在包含原始属性值的实例上存储一个对象。 JSON 是一个 javascript 对象。它已经“有点”实例化了。如果它看起来像你想要的对象,你不需要做太多。如果需要,您始终可以根据 JSON 数据实例化您自己的对象,但这需要手动映射是的。如果您不想推送和循环,可以使用 .map() 和 .filter() 等函数。

以上是关于从 JSON 实例化对象数组 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

从数组中的 JSON 对象中删除属性 [重复]

如何迭代由json对象中的键访问的数组[重复]

C# JSON 反序列化:如何从 JSON 对象数组中获取值 [重复]

BigQuery 中未嵌套的 json 对象的字符串化数组

Javascript 中数组与对象的实例化。数组啥时候是对象,啥时候得到数组的方法?

对象数组