68

ここで何かが欠けているに違いありませんが、次のコード ( Fiddle ) は空の文字列を返します。

var test = new Array();
test['a'] = 'test';
test['b'] = 'test b';
var json = JSON.stringify(test);
alert(json);

この配列を JSON 化する正しい方法は何ですか?

4

6 に答える 6

127

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);

于 2013-04-24T15:43:07.157 に答える
6

私はこれに対する修正をここに投稿しました

この関数を使用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);
    };
})();
于 2014-07-14T02:25:41.473 に答える
-6

Json にはキーと値のペアが必要です。値の部分として配列を使用することもできます。したがって、選択した「キー」を追加します。

var json = JSON.stringify({whatver: test});

于 2014-09-18T13:26:00.407 に答える