簡體   English   中英

為什么嘗試使用Stringify將數組轉換為JSON字符串時出現方括號

[英]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 = {};

shipInfo不是數組,而是一個對象,因此請嘗試var shipInfo = {};

演示: 問題解決方案

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM