JSON.stringify与示例不同

时间:2012-02-29 21:51:11

标签: javascript html json

我使用datatables.net jQuery插件来处理ajax表。我想发送一个带有JSON数据的POST请求。我使用JSON.stringify将我的数据转换为JSON。它产生如下结果:

[
  {"name":"sEcho","value":1},
  {"name":"iColumns","value":9},
  {"name":"sColumns","value":""},
  {"name":"iDisplayStart","value":0}
...]

虽然我希望它是这样的:

{"sEcho":1, "iColumns":9, "sColumns":"", "iDisplayStart":0} ...

我该怎么做?

2 个答案:

答案 0 :(得分:6)

您可以在JSON.stringify之前迭代您的数据并构建所需的结构:

var data = [{"name":"sEcho","value":1},{"name":"iColumns","value":9},{"name":"sColumns","value":""},{"name":"iDisplayStart","value":0}];

var options = {};
for (var i=0; i < data.length; i++){
  var key = data[i].name;
  var val = data[i].value;
  options[key] = val;
}

var jsonString = JSON.stringify(options);

您还可以使用jQuery each方法保存几行并使其看起来更好一些:

var options = {};
$.each(data, function(){
  options[this.name] = this.value;
});

答案 1 :(得分:2)

如果您的目标浏览器支持ECMA-262第5版(JavaScript 1.8.5),就像大多数现代浏览器一样,您可以使用array "reduce" method

var data = [{"name":"sEcho","value":1},{"name":"iColumns","value":9},{"name":"sColumns","value":""},{"name":"iDisplayStart","value":0}];

var obj = data.reduce(function(a,x){a[x.name]=x.value;return a;}, {});
JSON.stringify(obj); // '{"sEcho":1, "iColumns":9, ...}'