繁体   English   中英

如何解析json response.body以将密钥的值存储在Rails中的ruby中?

[英]How can I parse a json response.body to store a key's value in ruby on rails?

我正在使用模型进行的api调用收到json响应(response.body),在控制器中,我想对其进行解析以将其ID密钥的值存储在会话中:[user_id]。

我试图以以下方式实现它

parsed_body = JSON.parse(User.new.get_credentials, :symbolize_names => true)
puts "The parsed_body is: #{parsed_body}"
session[:user_id] = parsed_body[0][:id]
puts "The session id is: #{session[:user_id]} "

response.body为:

{"result":[{"id":"3","username":"Sam","password":"111"},{"id":"4","username":"Harshal","password":"1234"},{"id":"5","username":"Dev","password":"112"},{"id":"6","username":"Lam","password":"113"},{"id":"7","username":"Tim","password":"114"},{"id":"8","username":"Harry","password":"222"}]}

parsed_body为:

{:result=>[{:id=>"3", :username=>"Sam", :password=>"111"}, {:id=>"4", :username=>"Harshal", :password=>"1234"}, {:id=>"5", :username=>"Dev", :password=>"112"}, {:id=>"6", :username=>"Lam", :password=>"113"}, {:id=>"7", :username=>"Tim", :password=>"114"}, {:id=>"8", :username=>"Harry", :password=>"222"}]}

这是我的用户控制器,用户模型和会话控制器的代码:

用户控制器

class UsersController < ApplicationController
     def create
        @users = User.new(token: user_params).credentials
        parsed_body = JSON.parse(User.new.get_credentials, :symbolize_names => true)
        puts "The parsed_body is: #{parsed_body}"
        session[:user_id] = parsed_body[0][:id]
        puts "The session id is: #{session[:user_id]} "
        redirect_to '/dashboard'
      end

      private 
        def user_params
          params.require(:user).permit(:id, :username, :password).to_hash
        end
end

用户模型

class User

   def initialize(attributes={})
        @token ||= attributes[:token]
    end

   def credentials
        my_connection = Net::HTTP.new('localhost', 8080)
        request = my_connection.post('/restapitrial/index.php/Users/insert/', @token.to_json, "Content-Type" => "application/json")
  end

  def get_credentials
        my_connection = Net::HTTP.new('localhost', 8080)
        request = my_connection.get('/restapitrial/index.php/Users/displayinfo/', "Content-Type" => "application/json")
        puts "The req body is #{request.body}"
        return request.body
  end
end

会话控制器

class SessionsController < ApplicationController

    def create
        user = User.find_by(id: login_params[:id])
        if user && user.authenticate(login_params[:password])
            session[:user_id] = user.id
        redirect_to '/dashboard'
        else
            flash[:login_errors] = ['invalid credentials']
            redirect_to '/'
        end
    end

    private 
        def login_params
            params.require(:login).permit(:id, :username, :password)
        end

end

如果要获取返回的数组中的最后一个ID,请使用

parsed_body[:result][-1][:id]

暂无
暂无

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

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