JS对象的Stringify添加了额外的数据

时间:2013-04-24 19:07:07

标签: javascript jquery ajax json

在SO上获得一些很好的帮助之后,我使用以下代码段构建了一个JS对象:

var noticeMap = $('#preExamNoticesTable tbody tr').map(function() {
    var $cells = $(this).children();
    return {
      sequence: $cells.eq(0).children('input').val(),
      noticeUID: $cells.eq(1).text()
    };
});

示例结果noticeMap看起来像这样(来自firebug):

jQuery(Object { sequence="1", noticeUID="JP-L23013663997630352308"},
Object { sequence="3", noticeUID="JP-L22913664089460612172"}, 
Object { sequence="4", noticeUID="JP-L22913664090188631530"}, 
Object { sequence="2", noticeUID="JP-L22913664089408651799"})

当我尝试JSON.stringify(noticeMap)时,除了它之外,它还可以添加额外的数据到我不希望传递给POST的字符串。它为每个值(来自noticeMap的对象)生成数字键,但在最后一个所需的k:v对之后,我的字符串也有 context obj length prevObject obj。这是我stringify()之后的JSON和POST:

{ "0": { "sequence": "1", "noticeUID": "JP-L23013663997630352308" }, "1": { "sequence": "3", "noticeUID": "JP-L22913664089460612172" }, "2": { "sequence": "4", "noticeUID": "JP-L22913664090188631530" }, "3": { "sequence": "2", "noticeUID": "JP-L22913664089408651799" }, "length": 4, "prevObject": { "0": {}, "1": {}, "2": {}, "3": {}, "length": 4, "prevObject": { "0": { "location": {}, "jQuery19105836315711643562": 1 }, "context": { "location": {}, "jQuery19105836315711643562": 1 }, "length": 1 }, "context": { "location": {}, "jQuery19105836315711643562": 1 }, "selector": "#preExamNoticesTable tbody tr" }, "context": { "location": {}, "jQuery19105836315711643562": 1 } }

我无法弄清楚导致这种情况发生的原因。我开始假设它与stringify如何处理从对象的obj创建JSON字符串有关,但后来我不能使用现在工作得很漂亮的noticeMaps()。有什么想法吗?

谢谢!

2 个答案:

答案 0 :(得分:7)

您正在序列化一个jQuery对象,因此其中的所有可序列化属性都包含在输出中。试试这个:

JSON.stringify(noticeMap.get()); // .get will return an array

答案 1 :(得分:0)

http://msdn.microsoft.com/en-us/library/ie/cc836459(v=vs.94).aspx

  

如果value具有toJSON方法,则JSON.stringify函数使用   返回该方法的值。如果是toJSON方法的返回值   未定义,成员未转换。这使对象能够   确定自己的JSON表示。

你正在对你的对象进行字符串化,这就是stringify以自己的方式定义json的原因

您需要在地图对象上使用.get()来获取参数数组

noticeMap.get()