ここに私のjsonがあります:
{
"data": [
{
"comment": "3541",
"datetime": "2016-01-01"
}
]
}
モデルは次のとおりです。
export class Job {
constructor(comment:string, datetime:Date) {
this.comment = comment;
this.datetime = datetime;
}
comment:string;
datetime:Date;
}
クエリ:
getJobs() {
return this._http.get(jobsUrl)
.map((response:Response) => <Job[]>response.json().data)
}
問題は、Job[]
私はdatetime
propertyがDate
であることを期待していますが、それは文字列です。 Dateオブジェクトにキャストすべきではありませんか?ここで何が欠けていますか?
@Gunterは絶対に正しいです。私が追加したい唯一のものは、実際には、日付プロパティを文字列ではなく日付として保持するjsonオブジェクトをデシリアライズする方法です(参照された投稿から、このアプローチはそれほど簡単ではありません)。
私の試みは次のとおりです。
export class Helper
{
public static Deserialize(data: string): any
{
return JSON.parse(data, Helper.ReviveDateTime);
}
private static ReviveDateTime(key: any, value: any): any
{
if (typeof value === 'string')
{
let a = /\/Date\((\d*)\)\//.exec(value);
if (a)
{
return new Date(+a[1]);
}
}
return value;
}
}
たとえば、このアプローチは、dateReviverの例の JSON.parse Function で確認できます。
お役に立てれば。
TS/JSにとって、この値が日付であることを知る方法はありません。これは文字列であり、そのように扱われます。他のデータ型は区別できますが、JSONは日付の特別なサポートを提供しません。手動で変換する必要があります。
たとえば、JSONを使用して日付を転送および変換する方法については、この説明を参照してください Microsoft JSON日付をフォーマットするにはどうすればよいですか?