我正在研究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
答案 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[...]
。