[[]]にシリアライズ対象:JSON.stringifyは
0:[[]]
私はそれは次のようにシリアル化するために期待します
[[Col1 : 'val1', Col2: 'val2']]
内部オブジェクトのプロパティがシリアル化されないのはなぜですか?あなたがオブジェクトのように、あなたの内側の配列を使用するので、オブジェクトの代わりに、配列作る
[[]]にシリアライズ対象:JSON.stringifyは
0:[[]]
私はそれは次のようにシリアル化するために期待します
[[Col1 : 'val1', Col2: 'val2']]
内部オブジェクトのプロパティがシリアル化されないのはなぜですか?あなたがオブジェクトのように、あなたの内側の配列を使用するので、オブジェクトの代わりに、配列作る
としてそれを使用します。これを次のように変更します。
var row = {};
これはオブジェクトリテラルを作成します。あなたのコードは、(単一のオブジェクトを含む)オブジェクトの配列になります:
[{"Col1":"val1","Col2":"val2"}]
更新本当に何が起こるかを確認するには、あなたがjson2.js on GitHubで
を見ることができます。アレイのみ配列要素を列挙正常for
ループで反復処理さ
if (Object.prototype.toString.apply(value) === '[object Array]') {
//...
length = value.length;
for (i = 0; i < length; i += 1) {
partial[i] = str(i, value) || 'null';
}
//...
}
//...
for (k in value) {
if (Object.prototype.hasOwnProperty.call(value, k)) {
//...
}
//...
}
//...
注意:これは、(高濃度低下)(JSON.stringify
によって呼び出される)str
関数からの抜粋です。オブジェクトはfor...in
ループで反復され、hasOwnProperty
テストでproeprtyが実際にこのオブジェクトに属していることを確認します。
。
var lst = [];
var row = {};
row.Col1 = 'val1';
row.Col2 = 'val2';
lst.push(row);
又はrow
が配列ではなくオブジェクトであるためアレイ
var lst = [];
var row = {};
row.push('val1');
row.push('val2');
lst.push(row);
ありがとう、upvoted!それはジェームズからの答えで、 '{}'がオブジェクトで、 '[]'が配列であることがわかりました – Andomar
ので、Array
の実際のインスタンスが他のオブジェクトタイプとは異なる文字列化されています。
JavaScriptのArray
インスタンスが非数値キーで文字列化されている場合、[ ... ]
JSON配列構文では表現できませんでした。
たとえば、[ "Col1": "val1"]
は、JSON配列に明示的なキーを設定できないため無効です。
{"Col1": "val1"}
は有効ですが、配列ではありません。
そして、あなたは確かに 'n'matchとマッチして{ "Col1": "val1", 1, 2, 3 ]
か何かを得ることはできません。ところで
が、これは正常に動作します:
var lst = [];
var row = {};
row.Col1 = 'val1';
row.Col2 = 'val2';
lst.push(row);
alert(JSON.stringify(lst));
訪問http://json.org。 JSONには2つの構造があることがわかります。 1つはキーと値のペアを許可し、もう1つは単純な順序付きリストです。 JavaScriptオブジェクトはキーと値のペアにシリアル化され、JavaScript配列は順序付きリストにシリアル化されます。 –