【问题标题】:Ruby API - JSON Parsing - Writing to file [duplicate]Ruby API - JSON 解析 - 写入文件 [重复]
【发布时间】: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 来命名变量和方法。而不是 openwrite 在一个块中,只需使用 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


【解决方案1】:

使用pretty_generate,它将以更人性化的格式格式化 JSON。

请参阅pretty_generate 文档。

【讨论】:

  • 谢谢,这在放入控制台时效果很好,但是,如何在写入 JSON 文件时添加它? @JLB
  • f.write(JSON.pretty_generate(response))
  • @sammygadd 我刚刚做了这个,我忘了添加它,我现在得到 `generate': only generation of JSON objects or arrays allowed (JSON::GeneratorError)
  • 没关系刚刚解决了这个问题,非常感谢您的帮助。
  • 我想我犯了同样的错误(在响应中调用 .to_json)。 @Speedychuck
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-02-14
  • 2019-03-08
  • 1970-01-01
  • 2021-07-14
  • 2013-02-28
  • 2022-01-12
  • 2016-12-07
相关资源
最近更新 更多