2013-02-26 140 views
6

मैं to_json विधि को कॉल करने के बजाय .json.erb विचारों का उपयोग कर रहा हूं।रेल में JSON आउटपुट को कैसे कम करें?

मुझे JSON आउटपुट न्यूनीकरण से संबंधित कई सलाहयां मिली हैं। ऑनस वेब एप्लिकेशन के सभी आउटपुट को ज़िप करने के बारे में बताते हैं, अन्य after filter या before render का उपयोग करने की सलाह देते हैं, लेकिन वे जेएसओएन तत्वों के बीच रिक्त स्थान और टैब को कम करने और जेएसओएन इनपुट को कहां से ले सकते हैं और मिनीफॉर्म परिणाम कहां से ले सकते हैं। तीसरी सलाह जावास्क्रिप्ट को कम करने के बारे में सख्ती से बताती है।

उत्तर

4

रूबी को पूरी प्रतिक्रिया को पार्स करने के लिए बस एक आसान तरीका है और इसे after_filter का उपयोग करके फिर से बाहर थूकना है। निम्नलिखित कोड को app/controllers/application_controller.rb में आज़माएं।

class ApplicationController < ActionController::Base 
    after_filter :minify_json 

    private 

    def minify_json 
    response.body = JSON.parse(response.body).to_json if request.format.json? 
    end 
end 

आप तय करते हैं कि आप JSON न्यूनतम किया गया के बजाय सजा चाहते हैं, तो आप इस कोड का उपयोग कर सकते हैं:

class ApplicationController < ActionController::Base 
    after_filter :beautify_json 

    private 

    def beautify_json 
    response.body = JSON.pretty_generate(JSON.parse(response.body)) if request.format.json? 
    end 
end 

या, आप निवेदक एक पैरामीटर का उपयोग निर्दिष्ट करने के लिए अनुमति दे सकता है:

class ApplicationController < ActionController::Base 
    after_filter :format_json 

    private 

    def format_json 
    if request.format.json? 
     json = JSON.parse(response.body) 
     response.body = params[:pretty] ? JSON.pretty_generate(json) : json.to_json 
    end 
    end 
end