ruby - 有没有一种在 Ruby 中组合两个 JSON 文件或拆分一个 JSON 的简单方法?

标签 ruby

我的问题的第一部分是,如果我有两个 JSON 文件(file_a.json、file_b.json),其中的记录按日期排序。我怎样才能轻松地将两者结合起来?

文件_a.json:

[

    {
        "Date": "2012-11-19",
        "Open": 8.27,
        "High": 8.35,
        "Low": 8.21,
        "Close": 8.34,
        "Volume": 14606500,
        "Adj Close": 8.34
    },
    {
        "Date": "2012-11-15",
        "Open": 8.11,
        "High": 8.19,
        "Low": 8.02,
        "Close": 8.05,
        "Volume": 14798900,
        "Adj Close": 8.05
    }
]

文件_b.json:

[
    {
        "Date": "2012-11-14",
        "Open": 8.33,
        "High": 8.36,
        "Low": 8.1,
        "Close": 8.13,
        "Volume": 14175500,
        "Adj Close": 8.13
    },
    {
        "Date": "2012-11-13",
        "Open": 8.36,
        "High": 8.44,
        "Low": 8.3,
        "Close": 8.31,
        "Volume": 11103900,
        "Adj Close": 8.31
    }
]

我考虑过读取第一个 JSON,收集所有字段,然后尝试将它们写入第二个 JSON(就像我在下面开始的那样),但是有没有更好/更简单的方法来简单地连接两个排序的 JSON假设第二个从第一个停止的地方开始的日期?

json = File.read("file_a.json")
quotes = JSON.parse(json)
$close = quotes.collect {|quote| quote['Adj Close']}

其次,如果我确实有一个 JSON(与上面相同的键)- master.json 并且想在某个指定日期拆分它,是否有一种简单的方法可以做到这一点?

谢谢你的帮助

最佳答案

你可以读取这两个文件并合并它们:

master = %w[a b].map { |f| JSON.parse File.read("file_#{f}.json") }.flatten

master 现在将包含来自两个文件的数据。

按某个日期拆分:

require 'date'

start_date = Date.parse("2012-11-15") - 365
master_updated = master.select {|h| Date.parse(h["Date"]) >= start_date }

master_updated 将只包含日期 >= 2011-11-15 的项目

要将其转换回 json,请使用 master.to_json

Here是现场演示

(链接不再有效)

关于ruby - 有没有一种在 Ruby 中组合两个 JSON 文件或拆分一个 JSON 的简单方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13471066/

相关文章:

ruby-on-rails - 使用 Nokogiri 替换一些标签内容的有效方法

ruby - 如何使用要在倒排索引中使用的正则表达式匹配 Ruby 中的多行字符串?

ruby-on-rails - 有没有人想出如何在 Rails 3.2 中使用 Redcarpet gem for Markdown 嵌入视频?

ruby - `while ... end` 和 `while ... do ... end` 之间的区别

ruby-on-rails - 为什么我需要使用 minitest/autorun?

ruby - Nokogiri - 将多行 `<link>` 标签解析为链接和文本

ruby-on-rails - 请求 header 中的 HTTParty 整数

ruby - MiniTest 的 assert_in_delta 和 assert_in_epsilon 方法有什么区别?

ruby - 使用 rbenv ansible 安装 ruby

ruby - Ruby 中允许 "p *1..10"打印出数字 1-10 的功能是什么?