从 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<Panel>
。
【参考方案1】:
如果window['panels']['views']
中的数据是一个Panel 数组,你只需要强制转换它就可以让TypeScript 满意:
this.panels = <Panel[]>(window['panels']['views']);
这不会改变生成的 javascript 的任何内容,但会编译。
请注意,它永远不会调用 Panel
构造函数。 window['panels']['views']
中的对象已经实例化,所以它只是一个演员表。
【讨论】:
如果我想从 JSON 实例化一堆类,除了循环和推送之外,是否缺少某种模式?这似乎是一个相当常见的用例 - 例如,当我实例化类时,我想在包含原始属性值的实例上存储一个对象。 JSON 是一个 javascript 对象。它已经“有点”实例化了。如果它看起来像你想要的对象,你不需要做太多。如果需要,您始终可以根据 JSON 数据实例化您自己的对象,但这需要手动映射是的。如果您不想推送和循环,可以使用 .map() 和 .filter() 等函数。以上是关于从 JSON 实例化对象数组 [重复]的主要内容,如果未能解决你的问题,请参考以下文章
C# JSON 反序列化:如何从 JSON 对象数组中获取值 [重复]