-1

我的 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":[{},{}]}. 

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

4

5 回答 5

0

您在"这里缺少一个:

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

或者你可以使用这个:

JSON.stringify(o, null, 2);
于 2012-12-01T16:20:06.060 回答
0

你不能用$(this).id,试试$(this).attr('id')。为了价值,请使用$(this).val$(this).attr('value')

于 2012-12-01T16:32:35.053 回答
0

所以我想出了为什么它失败了。这是因为我使用$(this)而不是简单地使用这个。

工作代码:

o["Tags"].push({'TagKey': this.id, 'TagValue': this.value});
于 2012-12-01T16:32:43.410 回答
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;
};
于 2012-12-01T16:25:01.380 回答
0

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

于 2012-12-01T16:32:21.067 回答