当我尝试使用JSON.stringify将下面的数组转换为字符串时,我只会看到空的方括号。我尝试用console.log进行调试,但确实看到要转换为字符串的数据,所以我在这里做错了什么?任何帮助都感激不尽!
function jsonSuccess( data ){
var jsonArr = new Array();
for( var i = 0; i < data.length; i++ ){
var shipInfo = new Array();
var shipRows = new Array();
$.each( data[i], function( key, value ){
if ( key == "EniNumber" ) {
shipInfo['E'] = value;
//console.log( shipInfo.E );
}
if ( key == "Name" ) {
shipInfo['N'] = value;
}
if ( key == "StartDate" ) {
shipInfo['S'] = value;
}
if ( key == "Rows" ) {
$.each( value, function( subKey, subValue ){
var rowContent = {
"T": subValue.T,
"X": subValue.X,
"Y": subValue.Y,
"D": subValue.D
}
shipRows.push( rowContent );
});
shipInfo['R'] = shipRows;
}
});
jsonArr[i] = shipInfo;
var myJsonString = JSON.stringify(jsonArr);
console.log(myJsonString);
}
}
您正在使用数组作为对象。
在Javascript中,您具有数组和对象。但是,您可能知道数组也是对象,这有一些奇怪的含义。
var arr = [];
arr[0] = "foo"; // this is fine
console.log(JSON.stringify(arr)); // [ "foo" ]
arr.length; // 1 ok
但是由于Array是对象,所以我们还可以分配属性:
arr.foo = "bar";
console.log(arr); // [ 0: "foo", foo: "bar" ]
console.log(JSON.stringify(arr)); // [ "foo" ] .. where did bar go?
arr.length; // 1 huh?
我们正在混合数组值和对象属性。
JSON编码器查看该对象,并发现它是(instanceof)Array
并将其序列化。它看起来arr.length
(在示例中为1),所以您得到just [ "foo" ]
。数组上的属性将被忽略。
重要的是要认识到数组值和对象属性之间的区别。JavaScript中的数组从不关联。如果在数组上设置属性,则不会增加长度,如果在for循环中对其进行循环,则不会显示该属性。
改变:
var shipInfo = new Array();
到:
var shipInfo = {};
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句