javascript - 为什么在尝试使用 stringify 将数组转换为 JSON 字符串时出现方括号

标签 javascript jquery stringify square-bracket

当我尝试使用 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/

相关文章:

javascript - 当值未定义时,短路 window.location 而不触发刷新

jquery - 确认删除模式/对话框,Twitter Bootstrap 不起作用

javascript - javascript中的JSON解析问题

java - 如何使用 google-Gson 和 JSON.stringify 获得相同的结果

javascript - 循环不能正确执行函数操作

javascript - 将字符串中第二次出现的逗号替换为换行符

javascript - 构造函数的 "instance"是否有严格的定义?

javascript - jquery中如何删除数字的第一个字符?

javascript - 刷新某个div

javascript - 从 JSON.stringify 中提取数据