通过JSON.stringify创建带变量的JSON对象

时间:2014-06-27 20:26:33

标签: jquery json

我在通过JSON.stringify函数创建JSON对象时遇到了困难。当我手动创建对象时,我可以引用正确的对象没有问题,但是,当我通过这个函数(serializeObject)创建对象时,它似乎并不认识到它是一个对象。两者似乎都以相同的方式构建。

这是我尝试做的事情的小提琴: http://jsfiddle.net/CyM37/1/

在这个小提琴中,首先我要创建对象并转储到div中。然后我试图引用一个对象并将其转储到另一个div中(这部分不工作)。您可以取消注释代码以查看硬编码的JSON对象是否正常工作。

JS

$('#createJSON').click(function(){
       var allItems = JSON.stringify($('#myForm').serializeObject());
       var manualJSON = { "firstName":"John","lastName":"Doe"};
        $('#results').html(allItems);
        $('#results2').html(allItems.checkbox2);
        //$('#results2').html(manualJSON.lastName);
    });


    //serialize into JSON function
    $.fn.serializeObject = function()
    {
        var o = {};
        var a = this.serializeArray();
        $.each(a, function() {
            if (o[this.name] !== undefined) {
                if (!o[this.name].push) {
                    o[this.name] = [o[this.name]];
                }
                o[this.name].push(this.value || '');
            } else {
                o[this.name] = this.value || '';
            }
        });
        return o;
    };

关于为什么硬编码的JSON对象正在工作但是我通过函数创建的对象的任何想法都不是吗?它们看起来结构相同。

2 个答案:

答案 0 :(得分:2)

这是因为你把对象变成了一个字符串。例如:

console.log(allItems[0]) // writes "{"

试试这个:

 var allItems = $('#myForm').serializeObject();

这是更新后的FIDDLE

答案 1 :(得分:0)

您似乎对stringify感到困惑。它将对象转换为JSON 字符串。因此,在stringify之后尝试访问它的属性是没有意义的。该字符串没有checkbox2属性。

serializeObject方法生成一个对象,所以使用它。

试试这个:

$('#createJSON').click(function(){
   var allItems = $('#myForm').serializeObject();
    $('#results').html(JSON.stringify(allItems));
    $('#results2').html(allItems.checkbox2);
});

http://jsfiddle.net/CyM37/3/