2013-08-17 38 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);