当我尝试使用 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
但是由于数组是一个对象,我们也可以分配属性:
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 编码器查看该对象,发现它是一个(实例)Array
并将其序列化。它查看 arr.length
(在示例中为 1),因此您只得到 [ "foo"]
。数组上的属性将被忽略。
认识数组值和对象属性之间的区别很重要。 JavaScript 中的数组从不关联。如果您在数组上设置属性,它不会增加长度,并且如果您在 for 循环中循环它,它也不会显示。
<小时/>更改:
var shipInfo = new Array();
致:
var shipInfo = {};
关于javascript - 为什么在尝试使用 stringify 将数组转换为 JSON 字符串时出现方括号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19407746/