2012-12-27 112 views
1

我需要爲我的數據創建一個json-array。但在我的數據模型中,一些字段是不必要的,並且需要爲json數組更改一些字段名稱。 所以我創建了一個簡單的功能一個對象轉換成JSON格式,我需要使用:Rails - 用json對象創建json-array

def testMethod 
    {title: self.title, start: self.start_date, end: self.end_date, resource: Resource.find(self.resource_id).name}.to_json 
    end 

所以輸出此JSON對象是:

{:title=>"Test", :start=>Thu, 27 Dec 2012 10:25:00 UTC +00:00, :end=>Thu, 27 Dec 2012 10:25:00 UTC +00:00, :resource=>"Resource1"} 

但是,當我遍歷所有的

@calJson = [] 
@calendars.each do |cal| 
    @calJson.push(cal.testMethod) 
end 

我也會有這樣的無用字符串:

我用下面的循環對象

[「{\」title \「:\」Test \「,\」start \「:\」2012-12-27T10:25:00Z \「,\」end \「:\」2012-12- 27T10:25:00Z \「,\」resource \「:\」Resource1 \「}」, 「{\」title \「:\」ikincii \「,\」start \「:\」2012-12-27T10 :25:00Z「,\」end \「:\」2012-12-27T10:25:00Z \「,\」resource \「:\」Resource2 \「}」, 「{\」title \「: 「2012-12-27T10:27:00Z」,「結束」:「2012-12-27T10:27:00Z」,\「b da son \」,\「start \」:\「 「資源\」:\ 「資源1 \」}「]

而我想是這樣的:

[ { 標題: '午餐12.15-14.45', 開始,新的日期(Y,M,d,12,15), 端,新的日期(Y,M,d,14,45),

   resource: 'resource1' 
      },    
      { 
       title: 'Meeting', 
       start: new Date(y, m, d, 10, 30), 
       end: new Date(y, m, d+4, 11, 00), 

       resource: 'resource1' 
      } ] 

我該怎麼做?

謝謝。

+1

只是不要調用'to_json'。它將你的哈希變成一個JSON字符串。你想用散列工作。 –

回答

1

要直接回答你的問題:

def testMethod 
    {title: self.title, start: self.start_date, end: self.end_date, resource: Resource.find(self.resource_id).name} 
end 

@calJson = @calendars.each_with_object([]) {|cal, array| array << cal.testMethod }.to_json 

但你有更好的選擇:json builders致力於這個親屬d任務。

+0

非常感謝。還有一個問題:我有什麼方法可以返回start:new JSON中的Date(y,m,d,10,30)?我的意思是不帶引號。因爲JavaScript不理解這個 – CanCeylan

+0

您應該將日期作爲字符串傳遞,並在客戶端進行轉換。例如,如果你傳遞'created_at'的基本結果:「2011-02-15 12:25:33 +0100」,那麼你可以這樣做:'var date = new Date(「2011-02-15 12:25 :33 +0100「) – apneadiving

+0

另一種選擇是製作自定義日期格式對象。我有這個問題寫谷歌圖表的JSON,所以我創建了一個自定義的GoogleDate對象,它有自己的to_json方法。 – John

1

嘗試添加以下內容到相應的控制器:

respond_to do |format| 
    format.html 
    format.js { render json: @events } 
end 

而且,在我的事件模型,我重寫默認as_json方法與此一:

def as_json(options = {}) 
{ 
    :id => self.id, 
    :title => self.name, 
    :description => self.description || "", 
    :start => starts_at.rfc822, 
    :end => ends_at.rfc822, 
    :allDay => self.all_day 
} 
end 
+0

但問題是有一些我不想擁有的領域。還有一些字段需要改名 – CanCeylan

+0

在這種情況下,我想重寫as_json可以幫到你。 感謝downvote試圖幫助。你是否期望人們能夠幫助你,如果你對所有沒有解決問題的答案都付諸表決,但用戶試圖幫助你? –