【JavaScript】JSON変換したDateオブジェクトを復号する方法

更新日:2024/03/21

JSON.stringify()でデータを変換する際、Dateオブジェクトが含まれていても問題なく出力してくれます。
しかし JSON.parse() で元に戻そうとしても、Dateオブジェクトに戻ってくれません。
理由と、対処方法についてお伝えします。

 

DateオブジェクトとJSON

JSON.stringify()でDateオブジェクトをJSONに変換すると、日付が文字列で出力されます。

const obj = {
  a: new Date(2024,10,10,10,10,10,111)
};
const json = JSON.stringify(obj);
console.log( json );
 // {"a":"2024-11-10T01:10:10.111Z"}

出力されたJSONを JSON.parse() で変換すると、日付は文字列に変換されます。

const obj2 = JSON.parse(json);

console.log( obj2.a );        // 2024-11-10T01:10:10.111Z
console.log( typeof obj2.a ); // string

 

Dateオブジェクトに変換させる方法

日付文字列をDateオブジェクトに変換させたいときは、JSON.parse()の第二引数を使用します。
この引数は、キー名と値を受け取って、変換結果を返す関数を指定します。

つまり、受け取った文字列が日付なら、その日付を元にDateオブジェクトを生成して返します。
幸いなことに、JSONに出力される日付形式は固定なので、簡単な正規表現でチェックできます。

const obj2 = JSON.parse(json,(key,value)=>{
    if( typeof value === "string" 
      && /^\d{4}-[01]\d-[0-3]\dT[012]\d:[0-5]\d:[0-5]\d.\d{3}Z$/.test(value)){
        return new Date(value);
    }
    return value;
  });

console.log( obj2.a ); // 2024-11-10T01:10:10.111Z
console.log( obj2.a instanceof Date ); // true

うまく変換できました。

ちなみに、日付形式についてはtoJSON()を参照してください。

更新日:2024/03/21

書いた人(管理人):けーちゃん

スポンサーリンク

記事の内容について

null

こんにちはけーちゃんです。
説明するのって難しいですね。

「なんか言ってることおかしくない?」
たぶん、こんなご意見あると思います。

裏付けを取りながら記事を作成していますが、僕の勘違いだったり、そもそも情報源の内容が間違えていたりで、正確でないことが多いと思います。
そんなときは、ご意見もらえたら嬉しいです。

掲載コードについては事前に動作確認をしていますが、貼り付け後に体裁を整えるなどをした結果動作しないものになっていることがあります。
生暖かい視線でスルーするか、ご指摘ください。

ご意見、ご指摘はこちら。
https://note.affi-sapo-sv.com/info.php

 

このサイトは、リンクフリーです。大歓迎です。