ここで何かが欠けているに違いありませんが、次のコード ( Fiddle ) は空の文字列を返します。
var test = new Array();
test['a'] = 'test';
test['b'] = 'test b';
var json = JSON.stringify(test);
alert(json);
この配列を JSON 化する正しい方法は何ですか?
ここで何かが欠けているに違いありませんが、次のコード ( Fiddle ) は空の文字列を返します。
var test = new Array();
test['a'] = 'test';
test['b'] = 'test b';
var json = JSON.stringify(test);
alert(json);
この配列を JSON 化する正しい方法は何ですか?
JavaScript 配列は、数値インデックスを持つデータを保持するように設計されています。配列はオブジェクトのタイプであるため、それらに名前付きプロパティを追加できます(これは、通常の順序付けられた数値インデックス付きデータを保持する配列に関するメタデータを保存する場合に役立ちます)が、それは設計されたものではありません為に。
JSON 配列データ型は、配列に名前付きキーを持つことはできません。
名前付きプロパティに JavaScript 配列を渡すJSON.stringify
と、無視されます。
名前付きプロパティが必要な場合は、配列ではなくオブジェクトを使用してください。
const test = {}; // Object
test.a = 'test';
test.b = []; // Array
test.b.push('item');
test.b.push('item2');
test.b.push('item3');
test.b.item4 = "A value"; // Ignored by JSON.stringify
const json = JSON.stringify(test);
console.log(json);
私はこれに対する修正をここに投稿しました
この関数を使用JSON.stringify
して encodeに変更できarrays
ます。スクリプトの先頭近くに投稿するだけです (詳細については、上記のリンクを確認してください)。
// Upgrade for JSON.stringify, updated to allow arrays
(function(){
// Convert array to object
var convArrToObj = function(array){
var thisEleObj = new Object();
if(typeof array == "object"){
for(var i in array){
var thisEle = convArrToObj(array[i]);
thisEleObj[i] = thisEle;
}
}else {
thisEleObj = array;
}
return thisEleObj;
};
var oldJSONStringify = JSON.stringify;
JSON.stringify = function(input){
if(oldJSONStringify(input) == '[]')
return oldJSONStringify(convArrToObj(input));
else
return oldJSONStringify(input);
};
})();
Json にはキーと値のペアが必要です。値の部分として配列を使用することもできます。したがって、選択した「キー」を追加します。
var json = JSON.stringify({whatver: test});