3

PHPでは配列をエンコードでき、結果のjsonには角括弧が含まれていないことがわかりました.ただし、私のjavascript配列では、

var arrCars = new Array("Toyota", "Mercedes", "BMW");           
        var jsonStr = JSON.stringify(arrCars);
        alert(jsonStr);

角かっこを取得し続けます.json stringfyを使用すると、

var foo = {};  
foo.bar = "new property";  
foo.baz = 3;  

var JSONfoo = JSON.stringify(foo);

角かっこをなくすには、配列に何をする必要がありますか?.

4

3 に答える 3

2

javascriptの配列( [])とオブジェクト( )には違いがあります。{}最初の例では配列を使用しています。2番目の例では、オブジェクトを使用しています。主な違いは、配列([])がある場合、インデックスはゼロベースの整数のみになり得ることです。一方、オブジェクトは文字列であるプロパティ名を持つことができます。

于 2012-06-24T19:44:22.853 に答える
1

最初の例の配列の["Toyota","Mercedes","BMW"]正しい JSON は で、2 番目の例のオブジェクトの正しい JSON は{"bar":"new property","baz":3}または{"baz":3,"bar":"new property"}です。

JSON 文字列にはオブジェクトまたは配列のいずれかが含まれるため、常に中かっこ{}または角かっこのいずれかが含まれます[]

それ以外の場合、結果は正しくありません。それ以外を期待するなら、その期待は間違っています。

角括弧の代わりに中括弧が必要な場合は、配列ではなくオブジェクトをシリアル化する必要があります。

于 2012-06-24T19:49:10.077 に答える
1

ブラケットは配列リテラルを作成する通常の方法であるため、ブラケットが不要な理由がわかりません(以前のように Array() 関数を使用するのとは対照的に)

より大きな JSON 文字列などを構築している場合など、括弧なしの JSON が必要な場合は、次のようなものを使用できます。

function jsonifyArrayWithoutBrackets(a) {
    var output = [];
    for (var i=0; i<a.length; i++)
        output.push(JSON.stringify(a[i]));
    return output.join(',');
}

または、明らかに、JSON.stringify() への 1 回の呼び出しを使用した後、括弧を削除するだけです。

于 2012-06-24T20:03:13.093 に答える