最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

arrays - Javascript JSON stringify No Numeric Index to include in Data - Stack Overflow

programmeradmin3浏览0评论

i am trying to pass non numeric index values through JSON but am not getting the data.

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

When i alert the Data Variable it has the Values 1,2 and 3 but module and table are not included. How can this be added so that the whole string is passed.

EDIT : And what if i have some multidimensional elements also included like

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

i am trying to pass non numeric index values through JSON but am not getting the data.

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

When i alert the Data Variable it has the Values 1,2 and 3 but module and table are not included. How can this be added so that the whole string is passed.

EDIT : And what if i have some multidimensional elements also included like

  ConditionArray[0] = new Array();
  ConditionArray[0] = "11";
Share Improve this question edited Aug 27, 2012 at 12:39 HardCode asked Aug 27, 2012 at 12:01 HardCodeHardCode 1,6334 gold badges22 silver badges42 bronze badges 2
  • 1 What's the expected output....? [1, 2, 4, "module":"Test", "table":"tab_test"]? That's invalid JS. – Rob W Commented Aug 27, 2012 at 12:03
  • Per Rob W's ment, JSON is based on javascript objet literal notation. There is no notation for an array literal that adds properties that aren't indexes. – RobG Commented Aug 27, 2012 at 12:12
Add a ment  | 

8 Answers 8

Reset to default 2

JSON structure only recognizes numeric properties of an Array. Anything else is ignored.

You need an Object structure if you want to mix them.

var ConditionArray = new Object();

This would be an better approach:

var values = {
    array : ["1", "2", "3"],
    module : "Test",
    table : "tab_test"
};
var data = JSON.stringify(values);

Since javascript array accepts numeric index only. If you want non numeric index,use Object instead.

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

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

Here is the working DEMO : http://jsfiddle/cUhha/

According to the algorithm for JSON.stringfy (step 4b), only the (numeric) indices of arrays are stringified.

This is because Array does not contain your elements.

When you do this:

ConditionArray['module'] = "Test";

You actually add a property to the ConditionArray, not elements. While JSON.stringify converts to string only elements of the ConditionArray. For example:

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

You need to use an Object instead of Array

If you change the first line to

var ConditionArray = new Object();

you will achieve the desired oute.

If for some reason you cannot convert your array into object, for instance you are working on a big framework or legacy code that you dont want to touch and your job is only to add som feature which requires JSON API use, you should consider using JSON.stringify(json,function(k,v){}) version of the API. In the function you can now decide what to do with value of key is of a specific type.

this is the way how I solved this problem Where tblItemsTypeform is array and arrange is de index of the array :

let itemsData = [];
   

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

And finally use this in a variable to send to api:

var data = JSON.stringify(itemsData)
发布评论

评论列表(0)

  1. 暂无评论