歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> Linux編程 >> [Rails]一行代碼完成自定義JSON格式數據

[Rails]一行代碼完成自定義JSON格式數據

日期:2017/3/1 10:40:50   编辑:Linux編程

在Rails3中,增加JSON格式數據輸出非常方便,只需在Controller中稍作修改即可。一種做法是在controller的開始處添加respond_to :json,然後使用respond_with響應請求。舉例:假定有模型:書(book),有兩個字段:書名(name)和作者名(author),controller為BooksController,將其index方法修改為(假定在index方法中輸出JSON數據):

  1. class BooksController < ApplicationController
  2. // 支持html, xml ,json
  3. respond_to :html, :xml, :json
  4. def index
  5. @books = Books.all
  6. respond_with @books
  7. end
  8. // 其它方法忽略
  9. ...
  10. end

此時啟動服務後(執行rails s),訪問地址:http://localhost:3000/books/index.json將返回類似以下格式的數據:

  1. [
  2. "book":{"id":1,"title": "BookA","author":"Author1"},
  3. "book":{"id":2,"title": "BookB","author":"Author2"},
  4. "book":{"id":3,"title": "BookC","author":"Author3"}
  5. ]

某些情況下我們需要改變JSON輸出格式,比如:需要把數以萬計的記錄緩存到客戶端的localStorage或local database,去掉數據類型名稱book以及字段名稱id,name,author,將大大減小數據尺寸。如何改變這種格式輸出呢?比如,輸出為以下的數組格式:

  1. [
  2. ["1","BookA","Author1"],
  3. ["2","BookB","Author2"],
  4. ["3","BookC","Author3"]
  5. ]

一行代碼足矣。編輯文件app/views/books/index.json.erb,填入以下內容:

  1. [<%= raw @books.map { |b| '["' + "#{b.id}" + '","' + "#{b.name}" + '","'"#{b.author}" + '"]' }.join(',') %>]

另一種有稍微改進的寫法:

  1. [<%= raw @books.map { |b| %{["#{b.id}","#{b.name}","#{b.value}"]} }.join(',') %>]

(結束)

Copyright © Linux教程網 All Rights Reserved