2012-02-09 98 views
3

輸出示例:的JavaScript:從PHP從JSON對象中刪除鍵

{ 
    "RootName_0":{"Id":1,"ValId":1,"Value":"Colour","Text":"Blue"}, 
    "RootName_1":{"Id":1,"ValId":2,"Value":"Colour","Text":"Red"} 
} 

如何使用Backbone.jsjQuery只有有:

[ 
    {"Id":1,"ValId":1,"Value":"Colour","Text":"Blue"}, 
    {"Id":1,"ValId":2,"Value":"Colour","Text":"Red"} 
] 

如果它更容易使用PHP編輯JSON ,那就這樣吧。

+0

只需修復您的PHP輸出。不應該很難。無論如何,這是愚蠢的JSON輸出! – 2012-02-09 20:20:21

+0

無法更改JSON輸出,它必須在生成後進行更改。 – 2012-02-09 20:21:45

+0

那爲什麼呢?也請不要濫用逗號這樣的內容( – 2012-02-09 20:22:50

回答

8

那麼,在PHP它很容易,剛剛起步陣列上使用array_values(),使其「忘記」的數組索引(其中的方式,就是「RootName_X」叫你的情況:

$newvalue = array_values((array)$value); 
echo json_encode($newvalue); 

在JavaScript中,這是一個有點棘手,但它是對的臺詞:

var newvalue = []; 
for(var root in value) 
    newvalue.push(value[root]); 

的問題標題有點混亂,因爲這些肯定不是標籤

1

使用ES5(現代瀏覽器)時可以這樣做:

Object.keys(received).map(function(key) { 
    return received[key]; 
}); 

基本上,對象轉換爲它的鍵陣列,然後用更換的值的每個鍵。

+0

不錯的一個!非常緊湊。不過,他首先需要從他的JSON內容中獲得一個Javascript對象。 – 2012-02-09 20:23:37

+1

@Lightness在軌道中的比賽:我認爲OP已經能夠獲得JSON(這是使用jQuery的小菜一碟)。這只是在ajax回調中運行這個問題。 – pimvdb 2012-02-09 20:25:44

+0

你知道什麼是假設 – 2012-02-09 20:27:39

1

在JavaScript中,如果myFirstVar包含初始對象,然後執行:

mySecondVar = [ myFirstVar.RootName_0, myFirstVar.RootName_1 ]; 
+0

這不是特別可擴展的。 – 2012-02-09 20:24:23

+1

隨意使其更通用。我只是在展示這個概念。 – 2012-02-09 20:25:18

2

無需jQuery的或主幹:

var obj = { 
    "RootName_0":{"Id":1,"ValId":1,"Value":"Colour","Text":"Blue"}, 
    "RootName_1":{"Id":1,"ValId":2,"Value":"Colour","Text":"Red"} 
}; 
var colors = []; 

for(var key in obj){ 
    colors.push(obj[key]); 
}; 

你想要的值現在是colors陣列英寸

1

一旦JSON已經被解析,做到這一點使用jQuery的jQuery.map,並借用全球Object功能...

var arr = $.map(obj,Object); 

編輯:

如果你這樣做在JavaScript ,您應該意識到這些對象可能不會保持其原始順序。

如果RootName_n鍵是連續的,並且您知道最後一個鍵的n,則可以對此進行補救。

var last_key = 20; 

var arr = []; 

for(var i = 0; i <= last_key; i++) 
    arr.push(obj['RootName_' + i]);