简体   繁体   English

如何从Ruby on Rails解析JSON数据或(JSON代码)

[英]How to parse the json data or (json code) from Ruby on rails

I have an Ruby on rails source,code now i want to parse the data, and send the data.In my code,it will fetches the name from user and display it,How to parse the data in ROR. 我有一个Ruby on Rails源代码,现在我想解析数据并发送数据。在我的代码中,它将从用户那里获取名称并显示它,如何在ROR中解析数据。

This is my controller.rb code 这是我的controller.rb代码

def index
    @hotels = Hotel.all

    respond_to do |format|
      format.html # index.html.erb
      format.json { render json: @hotels }
    end
  end

  # GET /hotels/1
  # GET /hotels/1.json
  def show
    @hotel = Hotel.find(params[:id])

    respond_to do |format|
      format.html # show.html.erb
      format.json { render json: @hotel }
    end
  end

  # GET /hotels/new
  # GET /hotels/new.json
  def new
    @hotel = Hotel.new

    respond_to do |format|
      format.html # new.html.erb
      format.json { render json: @hotel }
    end
  end

  # GET /hotels/1/edit
  def edit
    @hotel = Hotel.find(params[:id])
  end

  # POST /hotels
  # POST /hotels.json
  def create
    @hotel = Hotel.new(params[:hotel])

    respond_to do |format|
      if @hotel.save
        format.html { redirect_to @hotel, notice: 'Hotel was successfully created.' }
        format.json { render json: @hotel, status: :created, location: @hotel }
      else
        format.html { render action: "new" }
        format.json { render json: @hotel.errors, status: :unprocessable_entity }
      end
    end
  end

  # PUT /hotels/1
  # PUT /hotels/1.json
  def update
    @hotel = Hotel.find(params[:id])

    respond_to do |format|
      if @hotel.update_attributes(params[:hotel])
        format.html { redirect_to @hotel, notice: 'Hotel was successfully updated.' }
        format.json { head :no_content }
      else
        format.html { render action: "edit" }
        format.json { render json: @hotel.errors, status: :unprocessable_entity }
      end
    end
  end

  # DELETE /hotels/1
  # DELETE /hotels/1.json
  def destroy
    @hotel = Hotel.find(params[:id])
    @hotel.destroy

    respond_to do |format|
      format.html { redirect_to hotels_url }
      format.json { head :no_content }
    end
  end

How to parse these data in ROR using Json HOw to write parsing json file for these data,how to do that one 如何使用Json HOw在ROR中解析这些数据以为这些数据编写解析json文件,该怎么做

    **Answer of my question**

This part we have to do in controller hotelscontroller.erb 这部分我们必须在控制器hotelscontroller.erb中完成

  respond_to :json, :xml
      def index
        @hotels = Hotel.all

        respond_to do |format|
          format.html # show.html.erb
          format.json { render json: @hotels.to_json(:only => [ :id, :name ]) }
        end
      end

view/index.json.erb 视图/ index.json.erb

[
  <% @hotels.each do |hotel| %>
    { 'id': <%= hotel.id %>, 'name': "<%= hotel.name %>" },
  <% end %>
]

routes.rb 的routes.rb

get 'hotels' => 'hotels#index', :as => 'hotels'

You can covert a hash to json by to_json method. 您可以使用to_json方法将哈希值隐藏到json中。 For reference please see http://apidock.com/rails/ActiveRecord/Serialization/to_json 有关参考,请参见http://apidock.com/rails/ActiveRecord/Serialization/to_json

for example, if you want to write all hotels to external file. 例如,如果要将所有酒店写入外部文件。

file = File.open("hotels.txt", "w")
file.puts Hotel.all.to_json
file.close

this will write all hotels in external file hotels.txt 这会将所有酒店写入外部文件hotels.txt

There are many ways: 有很多方法:

  1. Create method to_json for each model 为每个模型创建方法to_json
  2. Create view named, ie hotels/index.json.erb and write JSON code using ERb templating engine 创建名为hotels/index.json.erb视图,并使用ERb模板引擎编写JSON代码

     [ <% @hotels.each do |hotel| %> { 'id': <%= hotel.id %>, 'name': "<%= hotel.name %>" }, <% end %> ] 
  3. Use library like jbuilder (on the bottom of page is list of alternatives to JBuilder) 使用像jbuilder这样的库(在页面底部是JBuilder替代品的列表)

     # hotels/index.json.jbuilder json.array!(@hotels) do |hotel| json.id hotel.id json.name hotel.name end 

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM