2013-08-17 160 views
0

我有一个看起来像下面的东西一个JavaScript数组对象:操纵JSON

var Array = [{"foo1":"bar1","foo2":"bar2","foo3":"bar3","foo4":"bar4","foo5":"bar5","foo6":"bar6","foo7":"bar7"}, 
{"foo1":"bar5","foo2":"bar6","foo3":"bar7","foo4":"bar8","foo5":"bar9","foo6":"bar10","foo7":"bar10"}] 

我想这个数组转换为序列化JSON格式的字符串,它看起来像。我使用JSON.stringify序列化应该给我造成 串像下面这样:

'"fooAry" : [{"foo1":"bar1","foo2":"bar2","foo3":"bar3","foo4":"bar4"}, 
{"foo1":"bar5","foo2":"bar6","foo3":"bar7","foo4":"bar8"}]' 

正如你可以看到这里有两件事情:

  1. 摆脱过去的3个要素数组内的键值对
  2. 将密钥fooAry附加到生成的JSON字符串。
+0

键/值对是不是真正的数组内,也就是他们的,但更重要的是,他们都在里面了对象,并且顺序不能保证在一个对象中,只是删除最后三个可能不会做你想做的事情。 – adeneo

+0

另外,不要使用'Array'作为你的var名字,它可以认真地混淆其他代码。 – bfavaretto

+0

@adeneo我工作的场景保证了我最后3个三个键/值对的顺序,因此我想手动删除它。 – Raghu

回答

1

Asuming你真的可以保证在对象中的元素顺序:

var a = [ 
    {"foo1":"bar1","foo2":"bar2","foo3":"bar3","foo4":"bar4","foo5":"bar5","foo6":"bar6","foo7":"bar7"}, 
    {"foo1":"bar5","foo2":"bar6","foo3":"bar7","foo4":"bar8","foo5":"bar9","foo6":"bar10","foo7":"bar10"} 
]; 

// Object.keys polyfill 
if (!Object.keys) Object.keys = function(o){ 
    var ret=[], p; 
    for (p in o){ 
     if (Object.prototype.hasOwnProperty.call(o, p)){ 
      ret.push(p); 
     } 
    } 
    return ret; 
} 

function removeLast3(obj){ 
    var ks = Object.keys(obj).slice(0, -3); 
    var newobj = {}, k, i; 
    for (i=0; k=ks[i]; i++){ 
     newobj[k] = obj[k]; 
    } 
    return newobj; 
} 

var newA = [removeLast3(a[0]), removeLast3(a[1])]; 
var strA = '"fooAry": ' + JSON.stringify(newA);