序列化为json对象

时间:2012-12-01 16:18:03

标签: jquery

我的jQuery有点生疏,无法记住如何生成json对象。我试图从我的序列化方法创建下面的json但它没有用其他任何东西填充标签然后两个值?

function serializeObject() {
    var o = {};
    o["CompanyTemplateId"] = CompanyTemplateId;
    o["Tags"] = [];
    $("[id^=DQTag]").each(function () {
        o["Tags"].push({'TagKey': $(this).id, 'TagValue': $(this).value});
    });

    return o;
};

我希望它看起来像:

   {"CompanyTemplateId": "1",
    "Tags":[
            {"TagKey":"news1","TagValue":"This is a news item from tagValue."},{"TagKey":"news2","TagValue":"Second value"}
           ]
    }

我得到的结果是:

 {"CompanyTemplateId":"1","Tags":[{},{}]}. 

标签中的对象数量是正确的,但为什么没有任何键/值对?

5 个答案:

答案 0 :(得分:0)

您在这里错过"

"TagKey":"news1","TagValue":"This is a news item from tagValue.},
Quote missing here --------------------------------------------^

或者你可以使用它:

JSON.stringify(o, null, 2);

答案 1 :(得分:0)

看看这个功能。它似乎做了你想要的,也在IE9上。

function() {
    var o = {};
    o["CompanyTemplateId"] = 123;
    o["Tags"] = new Array();
    $("[id^=DQTag]").each(function(i , e) {
        o["Tags"][i] = new Object(); {
            o["Tags"][i].TagKey = e.id;
            o["Tags"][i].TagValue = e.value;
        };
    });
    console.log(o.Tags.length);
    console.log(o);
    console.log(JSON.stringify(o));
    return o;
};

答案 2 :(得分:0)

如果您在序列化JSON时担心浏览器支持,可以使用the JSON2.js library,它提供跨浏览器支持。包含它并使用JSON.stringify将对象序列化为JSON或JSON.parse以将JSON解码为对象。

答案 3 :(得分:0)

您无法使用$(this).id,请尝试$(this).attr('id')。对于值,请使用$(this).val$(this).attr('value');

答案 4 :(得分:0)

所以我想出了它失败的原因。这是因为我使用$(this)而不仅仅是这个。

wokring code:

o["Tags"].push({'TagKey': this.id, 'TagValue': this.value});