Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
有没有一种简单的方法可以在Ruby中组合两个JSON文件或拆分一个JSON?_Ruby - Fatal编程技术网

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

有没有一种简单的方法可以在Ruby中组合两个JSON文件或拆分一个JSON?,ruby,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, "A

我问题的第一部分是,如果我有两个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停止的地方开始,是否有更好/更简单的方法简单地连接两个按日期排序的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\u更新后
仅包含日期>=2011-11-15的项目

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

这是一个现场演示
(链接不再有效)

谢谢@Slivu-我对merge语句有点困惑。如何识别这两个文件名?是否合并了前缀为file\的任意两个文件?我的实际文件是AA_UPDATED.json和AA_up_to_now_UPDATED.json(最新记录在此文件中,[0]是最新记录)。那么,我是否可以将
[ab]
替换为
[up\u now\u UPDATED\u UPDATED]
,并将
“file”
更改为
“AA”
?再次感谢是的,只需根据您的需要替换
%w[ab]
,以及
File.read(“File#{f}.json”)
再次感谢@Slivu(它现在正在运行,完成后我会将其标记为正确)-我可以要求快速跟进吗?使用Time类,对于
start\u date=Time.parse(“2012-11-15”)
是否有方法将当前系统日期减去365天作为开始日期?类似于
start\u date=Time.parse(Time.now-365)
Time.now-365
将减少365秒而不是天数。对于天,请使用
Date.today-365
。要使其工作,请确保
在文件顶部要求“date”
,顺便说一句,要使其工作,您必须使用
date.parse
而不是
Time.parse
,或者在Time对象上调用
to_date
,如
Time.parse(…)。to_date