[英]Why do I get square brackets when trying to convert array to JSON string using stringify
當我嘗試使用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),因此您只得到[ "foo" ]
。 數組上的屬性將被忽略。
重要的是要認識到數組值和對象屬性之間的區別。 JavaScript中的數組從不關聯 。 如果在數組上設置屬性,則不會增加長度,如果在for循環中對其進行循環,則不會顯示該屬性。
更改:
var shipInfo = new Array();
至:
var shipInfo = {};
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.