哈希/字符串被转义

时间:2014-11-05 11:46:00

标签: ruby string hash escaping sinatra

这是我的超资源客户端:

require 'rubygems'
require 'hyperresource'
require 'json'

api = HyperResource.new(root: 'http://127.0.0.1:9393/todos',                      
                    headers: {'Accept' => 'application/vnd.127.0.0.1:9393/todos.v1+hal+json'})
string = '{"todo":{"title":"test"}}'
hash = JSON.parse(string) 
api.post(hash)
puts hash

哈希输出为:{“todo”=> {“title”=>“test”}}

在我的带有Roar API的Sinatra中,我有这个帖子功能:

post "/todos" do
  params.to_json
  puts params
  @todo = Todo.new(params[:todo])
  if @todo.save  
    @todo.extend(TodoRepresenter)
    @todo.to_json 
  else 
    puts 'FAIL'
  end 
end 

我的把'params'放在这里得到:{“{\”todo \“:{\”title \“:\”test \“}}”=> nil}

我发现,这些是“逃脱的字符串”,但我不知道它出了什么问题。

编辑:

我用curl和postman google扩展程序检查了我的api,两者都运行正常。它只是超资源我想

1 个答案:

答案 0 :(得分:0)

您正在发布JSON,因此您需要注册一个Sinatra中间件,它将自动解析传入的JSON请求,或者您需要自己完成。

require 'rubygems'
require 'hyperresource'
require 'json'

api = HyperResource.new(root: 'http://127.0.0.1:9393/todos',                      
                    headers: {'Accept' => 'application/vnd.127.0.0.1:9393/todos.v1+hal+json'})
string = '{"todo":{"title":"test"}}'
hash = JSON.parse(string) 
api.post({:data => hash})
puts hash    

---

post "/todos" do
  p = JSON.parse(params[:data])
  puts p.inspect
  @todo = Todo.new(p[:todo])
  if @todo.save  
    @todo.extend(TodoRepresenter)
    @todo.to_json 
  else 
    puts 'FAIL'
  end 
end 

应该做你需要的。