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 结构仅识别 Array 的数字属性。其他任何内容都将被忽略。

如果你想混合它们,你需要一个对象结构。

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

这是因为 Array 不包含您的元素。

当你这样做时:

ConditionArray['module'] = "Test";

您实际上将属性添加到ConditionArray,而不是元素。WhileJSON.stringify仅转换为字符串的元素ConditionArray。例如:

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

您需要使用 anObject而不是Array

于 2012-08-27T12:04:20.430 回答
1

由于 javascript 数组只接受数字索引。如果您想要非数字索引,请改用 Object 。

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 的 som 功能,您应该考虑使用 JSON .stringify(json,function(k,v){}) 版本的 API。在函数中,您现在可以决定如何处理特定类型的键值。

于 2015-02-06T00:35:14.167 回答
0

这就是我解决这个问题的方法其中 tblItemsTypeform 是数组,而排列是数组的索引:

let itemsData = [];
   

    for(var i = 0; i <= this.tblItemsTypeform.length -1;i++){
        let itemsForms = {
            arrange: i,
            values: this.tblItemsTypeform[i]
        }
        itemsData.push(itemsForms)
    }

最后在变量中使用它发送到 api:

var data = JSON.stringify(itemsData)
于 2020-09-15T17:34:57.743 回答