json で非連想配列をシリアライズしたいのですが、出力がかなり邪魔です
JSON.stringify([1]);
// Expected : "[1]"
Output : "\"[1]\""
配列を文字列として扱いますが、何が欠けていますか?
Chrome バージョン 29.0.1547.65 を使用しています
json で非連想配列をシリアライズしたいのですが、出力がかなり邪魔です
JSON.stringify([1]);
// Expected : "[1]"
Output : "\"[1]\""
配列を文字列として扱いますが、何が欠けていますか?
Chrome バージョン 29.0.1547.65 を使用しています
表示されている問題は、JSON.stringify のセマンティクスに関して正しく定義されていない Array.prototype.toJSON メソッドが原因です。下記参照:
出典: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON/stringify
toJSON の動作
文字列化されるオブジェクトに、値が関数である toJSON という名前のプロパティがある場合、toJSON メソッドは JSON 文字列化動作をカスタマイズします。オブジェクトがシリアル化される代わりに、呼び出されたときに toJSON メソッドによって返される値がシリアル化されます。
オブジェクトに toJSON メソッドがある場合、そのメソッドの結果はその場所で文字列化されます。toJSON メソッドが文字列化として定義されている場合、オブジェクトは二重文字列化されます。
私が知っている唯一の回避策は、メソッドを削除するか、組み込みとは異なるセマンティクスで独自の stringify() メソッドを実装することです。
可能であれば、単に Array.prototype からメソッドを削除してください。これによりページの他の機能が損なわれることが懸念される場合は、それを削除し、文字列化してから復元する必要があります。
function myStringify( o ) {
var temp = Array.prototype.toJSON;
delete Array.prototype.toJSON;
var result = JSON.stringify(o);
Array.prototype.toJSON = temp;
return result;
}