2012-01-20 19 views
1

我重寫to_json如何更換to_json中的按鍵?

當我打電話to_json在我的模型,我得到如下:

{ "integer1": "23", "integer2": "2", "integer3": "4", ... } 

我想to_json返回:

{ "Something": "23", "SomethingElse": "2", "AnotherThing": "4", ... } 

我有一個包含鍵和它的映射數組:

"integer1" => "Something", "integer2" => "SomethingElse", "integer3" => "AnotherThing", .... 

我該如何做到這一點?

+0

什麼版本的Rails的是你使用? –

+0

最後不是一個數組,它是一個哈希,對吧? – Phrogz

+0

@Progrog,以及它實際上包含該信息的對象。 – c0deNinja

回答

4
  1. 將您model instance into a hash
  2. 轉換散列成你想要的東西:

    h1 = { "integer1" => "23", "integer2" => "2", "integer3" => "4" } 
    h2 = { "integer1" => "Something", "integer2" => "SomethingElse", "integer3" => "AnotherThing" } 
    desired = Hash[ h1.map{ |k,v| [ h2[k], v ] } ] 
    
  3. 從讓你的JSON:

    json = desired.to_json 
    
+0

謝謝,剛剛實施它! – c0deNinja

+2

作爲替代品,如果有Hash [H2.values.zip(h1.values)]或Hash [h2.values_at(* h1.keys).zip(h1.values)]'條目將以不同的順序插入。 –

2

我強烈建議使用draper或類似的裝飾模式解決方案來創建對象的「JSON視圖」。

您將擁有一個裝飾模型,您可以在其上定義def as_json(options = {})並返回希望用作模型的JSON表示的數據的散列。這將它從模型中分離出來,並允許您輕鬆地單獨修改模型的「數據視圖」和數據的內部表示。

相關問題