2013-07-19 3 views
1

Я работаю над примером Ruby/Grape, и все работает, за исключением того, что json обслуживается с экранированным. Я новичок в рубине и его каркасах (всего 3 дня), поэтому извините, если этот вопрос исправен и заранее задерживаетсяRuby Grape: выход json экранирован

Я достаточно уверен, что не должно быть ускользания котировок, так или иначе это бегство выход:

"{\"word\":\"test\",\"sentiment\":\"unkown\"}" 

мой код

require 'rubygems' 
require 'grape' 
require 'json' 

class SentimentApiV1 < Grape::API 
    version 'v1', :using => :path, :vendor => '3scale' 
    format :json 

    resource :words do 
    get ':word' do 
     {:word => params[:word], :sentiment => "unkown"}.to_json 
    end 

    post ':word' do 
     {:word => params[:word], :result => "thinking"}.to_json 
    end 
    end 

    resource :sentences do 
    get ':sentence' do 
     {:sentence => params[:sentence], :result => "unkown"}.to_json 
    end 
    end 

end 

config.ru

$ :. unshift "./app"

требуют '' sentimentapi_v1.rb

запустить SentimentApiV1

Пакеты и варианты

C:\Ruby-Projects\GrapeTest>bundle install 
Using i18n (0.6.4) 
Using minitest (4.7.5) 
Using multi_json (1.7.7) 
Using atomic (1.1.10) 
Using thread_safe (0.1.0) 
Using tzinfo (0.3.37) 
Using activesupport (4.0.0) 
Using backports (3.3.3) 
Using builder (3.2.2) 
Using daemons (1.1.9) 
Using descendants_tracker (0.0.1) 
Using hashie (2.0.5) 
Using multi_xml (0.5.4) 
Using rack (1.5.2) 
Using rack-accept (0.4.5) 
Using rack-mount (0.8.3) 
Using virtus (0.5.5) 
Using grape (0.5.0) 
Using json (1.8.0) 
Using thin (1.5.1) 
Using bundler (1.3.5) 

Я бегу рубин 2.0, виноград .5, окна 8 64bit

ответ

4

Причина Экранирование происходит потому, что вы не нужны #to_json вызов в конце, потому что в строке 7 вы указываете format :json в качестве выходного формата.

1

хорошо - По-видимому, to_json не нужен в конце. возможно, двойной побег или что-то в этом роде. У демоверсии определенно был to_json, так что есть.

require 'rubygems' 
require 'grape' 
require 'json' 

class SentimentApiV1 < Grape::API 
    version 'v1', :using => :path, :vendor => '3scale' 
    format :json 

    resource :words do 
    get ':word' do 
     {:word => params[:word], :sentiment => "unkown"} 
    end 

    post ':word' do 
     {:word => params[:word], :result => "thinking"} 
    end 
    end 

    resource :sentences do 
    get ':sentence' do 
     {:sentence => params[:sentence], :result => "unkown"} 
    end 
    end 

end 
1

Ваш результат, "{\"word\":\"test\",\"sentiment\":\"unkown\"}" действительно действителен JSON. Это строка {"word":"test","sentiment":"unkown"}. Вызывая to_json, вы преобразовали свой хэш в String, затем Grape вернет то, что вы ему дали. Вместо этого используйте as_json, который вернет хэш, и Grape позаботится о его правильной сериализации.

Смежные вопросы