0

当我尝试使用 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);
        }

    }
4

2 回答 2

6

您正在使用 Array 作为对象。

在 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 中的数组永远不是关联的。如果您在 Array 上设置属性,它不会增加长度,并且如果您在 for 循环中循环它,它也不会显示。


改变:

var shipInfo = new Array();

到:

var shipInfo = {};
于 2013-10-16T15:39:38.863 回答
2

shipInfo不是数组,它是一个对象,所以试试var shipInfo = {};

演示:问题解决方案

于 2013-10-16T15:45:03.890 回答