Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 为什么从我的Sinatra应用程序返回的JSON会给出语法错误?_Ruby On Rails_Json_Sinatra - Fatal编程技术网

Ruby on rails 为什么从我的Sinatra应用程序返回的JSON会给出语法错误?

Ruby on rails 为什么从我的Sinatra应用程序返回的JSON会给出语法错误?,ruby-on-rails,json,sinatra,Ruby On Rails,Json,Sinatra,我正在开发一个Sinatra应用程序,它返回JSON,例如 get '/clients' do # do stuff response = { "success" => "true", "msg" => "Clients successfully retrieved", "data" => {"clients" => @current_user.clients} } return r

我正在开发一个Sinatra应用程序,它返回JSON,例如

  get '/clients' do

     # do stuff

     response = {
       "success" => "true",
       "msg" => "Clients successfully retrieved",
       "data" => {"clients" => @current_user.clients}
     }
     return response.to_json
  end
返回的JSON如下所示:

{"success":"true","msg":"Clients successfully retrieved","data":{"clients":[{"client":{"created_at":"2013-03-31T22:50:18Z","email":"test@test.com","first_name":"Marge","gender":"F","hairdresser_id":2,"id":1,"surname":"Simpson","updated_at":"2013-03-31T22:50:18Z"}}]}}
当我将它复制并粘贴到JSON解析器中时,它工作得很好。

但当我启动irb并尝试使用它时,我会得到一系列错误:

1.9.3-p286 :001 > a = {"success":"true","msg":"Clients successfully retrieved","data":{"clients":[{"client":{"created_at":"2013-03-31T22:50:18Z","email":"test@test.com","first_name":"Marge","gender":"F","hairdresser_id":2,"id":1,"surname":"Simpson","updated_at":"2013-03-31T22:50:18Z"}}]}}
SyntaxError: (irb):1: syntax error, unexpected ':', expecting tASSOC
a = {"success":"true","msg":"Clients success...
           ^
(irb):1: syntax error, unexpected ',', expecting $end
a = {"success":"true","msg":"Clients successfully r...
                  ^
  from /home/[me]/.rvm/rubies/ruby-1.9.3-p286/bin/irb:13:in `<main>'
1.9.3-p286 :002 > 
1.9.3-p286:001>a={“成功”:“true”,“msg”:“成功检索客户端”,“数据”:{“客户端”:[{“客户端”:{“创建时间”:“2013-03-31T22:50:18Z”,“电子邮件”:test@test.com“,”名字“:”玛姬“,”性别“:”F“,”理发师id“:”2“,”id“:”1“,”姓氏“:”辛普森“,”更新地址“:”2013-03-31T22:50:18Z“}]}”
语法错误:(irb):1:语法错误,意外的“:”,应为tASSOC
a={“success”:“true”,“msg”:“Clients success…”。。。
^
(irb):1:语法错误,意外的“,”,应为$end
a={“success”:“true”,“msg”:“客户端成功恢复…”。。。
^
from/home/[me]/.rvm/rubies/ruby-1.9.3-p286/bin/irb:13:in`'
1.9.3-p286:002>
有人能提供任何见解吗?我做错什么了吗

非常感谢你的问题 JSON并不是一个有效的Ruby,它是一个需要解析的字符串

解决方案 通过将JSON括在单引号或Ruby引号文本中,将其解析为字符串。例如:

JSON.parse %q/{"success":"true","msg":"Clients successfully retrieved","data":{"clients":[{"client":{"created_at":"2013-03-31T22:50:18Z","email":"test@test.com","first_name":"Marge","gender":"F","hairdresser_id":2,"id":1,"surname":"Simpson","updated_at":"2013-03-31T22:50:18Z"}}]}}/
=> {"success"=>"true",
 "msg"=>"Clients successfully retrieved",
 "data"=>
  {"clients"=>
    [{"client"=>
       {"created_at"=>"2013-03-31T22:50:18Z",
        "email"=>"test@test.com",
        "first_name"=>"Marge",
        "gender"=>"F",
        "hairdresser_id"=>2,
        "id"=>1,
        "surname"=>"Simpson",
        "updated_at"=>"2013-03-31T22:50:18Z"}}]}}

散列中的键值对表示为{key:value},但ruby使用“=>”符号将键映射到值

尝试将“:”替换为“=>”,效果很好

eg) a = {"success" => "true"}
如果要将此Json解析为ruby,请使用以下代码段:

require 'json'
value = "{\"val\":\"test\",\"val1\":\"test1\",\"val2\":\"test2\"}"
puts JSON.parse(value) # => {"val"=>"test","val1"=>"test1","val2"=>"test2"}

谢谢!完成了任务:)