在静态方法中获取映射输入数据的语法是正确的。我的json数组看起来像这样:
[
{
"documents": [
{
"title": "+1 (film)",
"is-saved": false,
"abstract": "some text",
"id": "_1__film_",
"url": "some url"
}
]
}
]
该数组中的每个项目都是Result
。
作为参考映射一个结果的示例,我知道该怎么做:
static resultFromJSON(json): Result {
let documents: SearchQueryDocument[] =
json.documents.map(doc => new SearchQueryDocument(doc.title, doc.issaved, doc.abstract, doc.id, doc.url))
return new Result(documents)
}
但是我需要映射整个数组,所以我该怎么做?
static resultsFromJSON(json): Result[] {
let results: Result =
json.map ... // what here?
}
映射一个结果我可以使用json.documents.map...
但映射整个数组它没有" name"使用......
也许是来自新手的愚蠢问题,但任何帮助都表示赞赏!
答案 0 :(得分:1)
如果我理解正确,那么你的json对应于以下界面:
interface IDocument {
title: string;
"is-saved": boolean;
"abstract": string;
id: string;
url: string;
}
interface IResult {
documents: Document[];
}
然后你有一个Result
数组
要映射那个json,你可以这样做:
static resultsFromJSON(json): Result[] {
return json.map(obj => {
new Result(obj.documents.map(doc => {
return new SearchQueryDocument(doc.title, doc.issaved, doc.abstract, doc.id, doc.url);
}));
});
}
答案 1 :(得分:0)
对我有用的解决方案只是对Nitzan Tomer的上述静态方法稍作改动。
这有效:
static resultsFromJSON(json): Result[] {
return json.map(obj =>
new Result(obj.documents.map(doc =>
new SearchQueryDocument(doc.title, doc.issaved, doc.abstract, doc.id, doc.url)
))
)
}