为什么我得到[object Object]而不是JSON?

时间:2011-07-14 09:21:47

标签: javascript jquery json

这是剧本:

$("#some_button").click(function() {

    var changed = [];

    $( 'input[id$="_1"]' ).each(function() {

        var new_id = this.id.replace( '_1', '_0' );

        if ( $(this).val() !== $( 'input#' + new_id ).val() ) {

            changed.push({id:new_id, new_val:$('input#' + new_id).val(), old_val:$(this).val()});

        }

    });

    alert(changed);

});

它给了我[object Object],[object Object]

我做错了什么?

2 个答案:

答案 0 :(得分:8)

因为你没有JSON。你有一个数组:[]。 JSON是javascript对象的字符串表示。

您可以使用JSON.stringify方法从现有对象生成JSON字符串:

alert(JSON.stringify(changed));

JSON.stringify方法在现代浏览器中是原生的,但如果您需要支持旧版浏览器,则需要在页面中加入json2.js。此脚本检查浏览器是否支持本机JSON.stringify并使用它,如果不支持,则提供示例实现。

答案 1 :(得分:2)

JSON是显示/编码JavaScript对象的一种方法,但默认情况下不使用它。当您将对象转换为字符串时,通常只会得到像"[object Object]"这样无用的值。

如果要将对象转换为JSON字符串,则需要使用JSON.stringify函数。 (这包含在新浏览器中,但在较旧的浏览器中需要JSON library。)

在您的情况下,您可能希望将alert行替换为

alert(JSON.stringify(changed));