【发布时间】:2016-08-13 20:08:11
【问题描述】:
我从 URL 获取 REST 响应数据。然后我将它写入一个 JSON 文件,但是,它将它放在一个长字符串中的一行上,我需要在 JSON 文件中以可读格式保存它。
我的代码是:
require 'rubygems'
require 'json'
require 'rest-client'
class Rest
def self.getData
response = RestClient.get 'http://jsonplaceholder.typicode.com/posts'
response = JSON.parse(response)
File.open('/Users/robertreed/RubymineProjects/draft/posts.json', 'w') do |f|
f.write(response.to_json)
end
puts response
end
getData
end
它正在打印到控制台并在一行中写入 JSON 文件:
[{"userId"=>10, "id"=>100, "title"=>"at nam consequatur ea labore ea harum", "body"=>"cupiditate quo est a modi nesciunt}]
关于如何实现这一点的任何建议?
【问题讨论】:
-
如果您以“漂亮格式”保存 JSON,以允许人类对其进行编辑,您应该改用 YAML。它更具可读性。 JSON 在应用程序之间传输数据时非常有用,但是为了可读性而对其进行格式化确实会增加文件大小,从而导致它使用更多的 CPU、更多的网络带宽和应用程序时间。
-
不要将类命名为“Rest”。 “RestResponse”会更好,因为类应该是“事物”。而不是
getData,您应该使用get_data。在 Ruby 中,我们使用 snake_case 来命名变量和方法。而不是open和write在一个块中,只需使用File.write('file.txt', response.to_json)。 -
这听起来像是一个很好的建议,我不确定我将使用 JSON 来加入一个新的 QA 团队,并且我只使用 xml 来保存传递的参数。但被告知要调查它。
-
感谢关于类名和snake_case的指针我会相应地调整自己,但是,使用块来分解代码不是很好吗?就像保持代码井井有条?
-
块对此很有用,但是您正在浪费代码来做一些非常简单的事情。你基本上是在写,所以只需使用
File.write。 注意:它是在IO中定义的,但是File继承自IO,你通常会看到它是从File中访问的。
标签: ruby-on-rails ruby json api rest