0

JSON を介して数値以外のインデックス値を渡そうとしていますが、データを取得できません。

var ConditionArray = new Array();
ConditionArray[0] = "1";
ConditionArray[1] = "2";
ConditionArray[2] = "3";

ConditionArray['module'] = "Test";
ConditionArray['table']  = "tab_test";
var Data = JSON.stringify(ConditionArray);

データ変数に警告すると、値は 1、2、3 になりますが、モジュールとテーブルは含まれません。文字列全体が渡されるように、これをどのように追加できますか。

編集:そして、次のような多次元要素も含まれているとどうなりますか

  ConditionArray[0] = new Array();
  ConditionArray[0] = "11";
4

8 に答える 8

2

JSON構造体は、配列の数値プロパティのみを認識します。それ以外は無視されます。

それらを混合したい場合は、オブジェクト構造が必要です。

var ConditionArray = new Object();
于 2012-08-27T12:03:24.347 に答える
2

これはより良いアプローチです:

var values = {
    array : ["1", "2", "3"],
    module : "Test",
    table : "tab_test"
};
var data = JSON.stringify(values);
于 2012-08-27T12:04:02.990 に答える
1

これは、配列に要素が含まれていないためです。

これを行うとき:

ConditionArray['module'] = "Test";

実際にはConditionArray、要素ではなく、にプロパティを追加します。JSON.stringifyの要素のみを文字列に変換しますConditionArray。例えば:

var arr = new Array;
arr['str'] = 'string';
console.log(arr.length) //outputs 0

Objectの代わりに使用する必要がありますArray

于 2012-08-27T12:04:20.430 に答える
1

JavaScript配列は数値インデックスのみを受け入れるため。数値以外のインデックスが必要な場合は、代わりにオブジェクトを使用してください。

var ConditionArray = {};
ConditionArray[0] = "1";
ConditionArray[1] = "2";
ConditionArray[2] = "3";

ConditionArray['module'] = "Test";
ConditionArray['table']  = "tab_test";
var Data = JSON.stringify(ConditionArray);

ここに動作するデモがあります: http://jsfiddle.net/cUhha/

于 2012-08-27T12:07:49.693 に答える
1

JSON.stringfyのアルゴリズム(ステップ 4b) に従って、配列の (数値) インデックスのみが文字列化されます。

于 2012-08-27T12:08:06.327 に答える
0

最初の行をに変更した場合

var ConditionArray = new Object();

あなたは望ましい結果を達成するでしょう。

于 2012-08-27T12:06:40.047 に答える
0

なんらかの理由で配列をオブジェクトに変換できない場合、たとえば、触れたくない大きなフレームワークやレガシー コードに取り組んでいて、JSON API の使用を必要とするいくつかの機能を追加するだけの場合は、JSON の使用を検討する必要があります。 .stringify(json,function(k,v){}) API のバージョン。この関数では、特定の型のキーの値をどうするかを決めることができます。

于 2015-02-06T00:35:14.167 に答える