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

时间:2012-11-20 10:19:30

标签: ruby

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

file_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
    }
]

file_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并想在某个指定日期拆分它,有没有一种简单的方法可以做到这一点?

感谢您的帮助

1 个答案:

答案 0 :(得分:3)

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

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是一个现场演示

(链接不再有效)

相关问题