Ruby API - JSON Parsing - Writing to file
我从一个URL获取其余的响应数据。然后我把它写到一个JSON文件中,但是它被放在一个长字符串中的一行上,我需要在JSON文件中使用可读的格式。
我的代码是:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
| 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文件:
1
| [{"userId"=>10,"id"=>100,"title"=>"at nam consequatur ea labore ea harum","body"=>"cupiditate quo est a modi nesciunt}] |
号
关于如何实现这一点有什么建议吗?
- 如果您将JSON保存为"漂亮的格式",允许人类编辑它,那么您应该使用yaml。它的可读性更高。JSON在应用程序之间传输数据时非常好,但是为了可读性而格式化它确实可以增加文件大小,从而使它使用更多的CPU、更多的网络带宽和应用程序时间。
- 不要将类命名为"rest"。"休息室"会更好,因为课堂应该是"东西"。您应该使用get_data,而不是getData。在Ruby中,我们使用snake-case来命名变量和方法。而不是一个块中的open和write,只需使用File.write('file.txt', response.to_json)。
- 这听起来是一个很好的建议,我不太确定我将使用JSON来做什么,因为我刚加入了一个新的QA团队,我只使用XML来保存传递的参数。但被告知要调查此事。
- 多亏了类名和snake-case上的指针,我将相应地调整自己,但是,使用块分解代码是否不好?就像保持代码有序?
- 块是有用的,但是你在浪费代码来做一些非常简单的事情。你基本上是在写东西,所以用File.write就可以了。注意:它在IO中定义,但文件继承自IO,您通常会看到它是从文件访问的。
使用pretty_generate,这将以更人性化的格式格式化JSON。
见pretty_generate文件。
- 谢谢,当放到控制台上时,这很好地工作,但是,在写入JSON文件时,如何将其添加到中呢?@ JLB
- f.write(json.pretty_生成(响应))
- @sammygadd我刚刚做了这个,我忘了添加它,现在我得到了"generate":只允许生成JSON对象或数组(json::generatorError)
- 没关系解决了这个问题,非常感谢你的帮助。
- 我想我也犯了同样的错误(打电话给你回复)。@速度车