4

ChromeCanaryを使用してテスト済み

日付をJSONに変換できます:

> (new Date()).toJSON()
  "2012-05-03T22:27:30.530Z"

日付に戻すことができます:

> typeof (new Date("2012-05-03T22:27:30.530Z"))
  object

JSON.parse()を使用して日付として解析できないのはなぜですか?JSON.parseは、日付ではなく文字列を返します。

> JSON.parse('{"DateValue":"2012-05-03T22:27:30.530Z"}').DateValue
 "2012-05-03T22:27:30.530Z"
4

3 に答える 3

8

日付はJSONでは有効なタイプではないためです。JSONは、文字列、数値、ブール値、配列、およびジェネリックオブジェクト(連想配列/ハッシュ/マップ/辞書/ pick-your-favorite-name)についてのみ認識します。他のものをJSONに変換すると、上記のいずれかが得られます。つまり、「他のもの」を最初のタイプとして元に戻したい場合、レシーバーはそれを再作成するために追加の作業を行う必要があります。

抽象化されたJSONライブラリがあり、何かがどのクラスであるかを示す追加の属性が含まれているため、レシーバーが同じライブラリを使用している場合は、そのタイプが返されますが、それでも同じ作業であり、ライブラリによって隠されているだけです。 。

于 2012-05-03T22:45:08.837 に答える
3

JSONでは、日付文字列であるため、同じようnew Date("2012-05-03T22:27:30.530Z")に文字列を解析します。JavaScriptがJSONの文字列が日付であることを認識していることを期待しています。

日付を元に戻すには、JSONで解析された文字列を日付オブジェクトに渡す必要があります。

var date = new Date(JSON.parse('{"DateValue":"2012-05-03T22:27:30.530Z"}').DateValue);
于 2012-05-03T22:42:16.873 に答える
0

この.toJSONメソッドは、JSONで表すことができる値を返すためだけにあります。ただし、JSONはデータ型を認識しておらず、オブジェクトインスタンス情報(プロトタイプなど)をJSON文字列に格納することはできません。

したがって、DateのtoJSONメソッドは、数値(Unixタイムスタンプなど)、年、月、日などを表すプロパティを持つプレーンオブジェクト(Dateコンストラクターで解析できないためあまり良くありません)または-たまたま-を返す可能性があります。文字列、ここではISO時間形式。これで、を使用new Date(JSON.parse(stringified_date))して新しいDateオブジェクトを作成できます。

の場合delete Date.prototype.toJSON;JSON.stringify(new Date)結果はになり"{}"ます。

于 2012-05-03T22:52:51.627 に答える