如何将JSON response.body放入字符串中

时间:2015-06-01 16:12:22

标签: ruby-on-rails ruby

我正在研究Ruby中的JSON。有人可以告诉我如何使用response.body并将其发布在字符串中。

是否有任何宝石可通过解析对此信息进行排序?

require 'net/http'
require 'json'


uri = URI('https://api.wmata.com/StationPrediction.svc/json/GetPrediction/all')
uri.query = URI.encode_www_form({
   # Specify your subscription key
   'api_key' => '#',
})
request = Net::HTTP::Get.new(uri.request_uri)

# Basic Authorization Sample
# request.basic_auth 'username', 'password'


response = Net::HTTP.start(uri.host, uri.port, :use_ssl => uri.scheme == 'https') do |http|
    http.request(request)

 @data = response

end

2 个答案:

答案 0 :(得分:5)

您可以使用以下命令将JSON响应转换为哈希:

hash_response = JSON.parse(response)

之后,您可以在ruby函数中轻松使用hash。

答案 1 :(得分:1)

JSON gem非常智能,可以很容易地将对象转换为JSON,或者将JSON字符串转换回对象。这是一个简单的往返示例:

require 'json'

foo = {'a' => 1, 'b' => [2, 3]}
json_string = JSON[foo]
json_string # => "{\"a\":1,\"b\":[2,3]}"

bar = JSON[json_string] # => {"a"=>1, "b"=>[2, 3]}

bar == foo # => true

请注意JSON\[...\]会感知参数是字符串还是哈希(或数组)。如果它是第一个尝试将字符串转换为散列或数组,或者反之亦然。来自文档:

  

如果object是类似字符串的,则解析字符串并将解析后的结果作为Ruby数据结构返回。否则,从Ruby数据结构对象生成JSON文本并将其返回。

如果您还希望转换对象,则可以使用to_json方法:

foo.to_json # => "{\"a\":1,\"b\":[2,3]}"

有些问题你需要注意使用to_json,因为如果你不给它一个数组或一个哈希,它会产生无效的JSON输出:

'a'.to_json # => "\"a\""
1.to_json # => "1"

JSON.parse(...)也可用于将字符串转回对象:

JSON.parse(json_string) # => {"a"=>1, "b"=>[2, 3]}

但我倾向于使用较短的JSON[...]