我的问题的第一部分是,如果我有两个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并想在某个指定日期拆分它,有没有一种简单的方法可以做到这一点?
感谢您的帮助
答案 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
(链接不再有效)