ホームページ >ウェブフロントエンド >フロントエンドQ&A >Vue JSON シリアル化の問題と解決策の分析

Vue JSON シリアル化の問題と解決策の分析

PHPz
PHPzオリジナル
2023-04-12 09:17:281319ブラウズ

フロントエンド開発では、バックエンドとの間でデータを転送したり、バックエンドからデータを取得したりする必要があることがよくありますが、このとき、データのシリアル化と逆シリアル化を使用する必要があり、JSON (JavaScript Object Notation) は非常に便利です。一般的なデータ伝送形式。 Vue フレームワークでは、通常、axios や fetch などのツールを使用して、AJAX を通じてバックエンドからデータを取得し、そのデータを Vue コンポーネントにバインドしますが、特に Date などの JSON 内のデータの場合に、JSON シリアル化の問題が発生することがあります。型はシリアル化できません。この記事では、JSON シリアル化の問題とその解決策について説明します。

まず、一般的な JSON シリアル化の問題を理解する必要があります。 JavaScript では、JSON.stringify メソッドを使用して JavaScript オブジェクトを JSON 文字列にシリアル化できます。例:

let obj = {
  name: 'John',
  age: 30,
  birthday: new Date(1990, 1, 1)
};

let json = JSON.stringify(obj);
console.log(json); // {"name":"John","age":30,"birthday":"1990-02-01T00:00:00.000Z"}

上記のコードは、日付型のプロパティを含む JavaScript オブジェクトを JSON 文字列にシリアル化しますが、次のことが判明しました。 Date 型は文字列にシリアル化されました。この JSON 文字列を JavaScript オブジェクトに直接解析すると、Date 型の文字列が Date オブジェクトに変換されますが、この JSON 文字列をバックエンドに渡すと、バックエンドが JSON 文字列を解析するときに、Date 型の文字列は変換されません。正しく解析されました。

そこで問題は、Date 型またはシリアル化できないその他の型を含む JavaScript オブジェクトをどのようにシリアル化するかということです。現時点では、JSON.stringify メソッドの 2 番目のパラメーター (replacer パラメーター) を使用して、シリアル化プロセスをカスタマイズできます。

replacer パラメータには関数を使用できます。この関数は、属性名と属性値の 2 つのパラメータを受け取り、元の属性値を置き換える新しい属性値を返します。例:

let obj = {
  name: 'John',
  age: 30,
  birthday: new Date(1990, 1, 1)
};

let json = JSON.stringify(obj, function(key, value) {
  if (key === 'birthday') {
    return value.toISOString();
  } else {
    return value;
  }
});

console.log(json); // {"name":"John","age":30,"birthday":"1990-02-01T00:00:00.000Z"}

上のコードでは、置換関数を定義します。現在の属性名が誕生日の場合、Date の toISOString メソッドを使用して ISO 形式の文字列に変換し、バックエンドで解析できるようにします。それ以外の場合は、元の属性値を返します。このようにして、Date 型を含む JavaScript オブジェクトを正しくシリアル化できます。

replacer パラメーターに加えて、JSON.stringify メソッドにはスペース パラメーターもあり、出力 JSON 文字列コンテンツの形式を定義するために使用できます。たとえば、次のようになります。上記のコードではスペースを使用しています。パラメーターを 2 に設定すると、出力される JSON 文字列がインデントされ、より美しくなります。

要約すると、axios または他のツールを使用して Vue でデータを取得するとき、データに直接シリアル化できない日付型やその他のデータが含まれている場合、JSON.stringify メソッドの replacer パラメーターを使用して、データをバックエンドに正しく渡すためのシリアル化ルール。

以上がVue JSON シリアル化の問題と解決策の分析の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。