首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >为什么我的Sinatra应用程序返回的JSON出现语法错误?

为什么我的Sinatra应用程序返回的JSON出现语法错误?
EN

Stack Overflow用户
提问于 2013-04-01 20:30:34
回答 2查看 405关注 0票数 0

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

代码语言:javascript
代码运行次数:0
运行
复制
  get '/clients' do

     # do stuff

     response = {
       "success" => "true",
       "msg" => "Clients successfully retrieved",
       "data" => {"clients" => @current_user.clients}
     }
     return response.to_json
  end

返回的JSON如下所示:

代码语言:javascript
代码运行次数:0
运行
复制
{"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解析器中时,它工作得很好。http://json.parser.online.fr/

但是当我启动irb并尝试使用它时,我得到了一堆错误:

代码语言:javascript
代码运行次数:0
运行
复制
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 > 

有谁能提供一些见解吗?我做错了什么吗?

非常感谢

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-04-01 20:34:41

问题

JSON不构成有效的Ruby hash。这是一个需要用JSON#parse解析的字符串。

解决方案

通过使用单引号或Ruby引号将JSON解析为字符串。例如:

代码语言:javascript
代码运行次数:0
运行
复制
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"}}]}}
票数 2
EN

Stack Overflow用户

发布于 2013-04-01 20:38:15

您的散列具有表示为{ key : value }的键值对,但ruby使用'=>‘符号将键映射到值。

尝试将':‘替换为'=>’,效果很好。

代码语言:javascript
代码运行次数:0
运行
复制
eg) a = {"success" => "true"}

如果你想把这个Json解析成ruby has,那就使用下面的代码片段:

代码语言:javascript
代码运行次数:0
运行
复制
require 'json'
value = "{\"val\":\"test\",\"val1\":\"test1\",\"val2\":\"test2\"}"
puts JSON.parse(value) # => {"val"=>"test","val1"=>"test1","val2"=>"test2"}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15743513

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档