Ruby - 使用可变循环迭代从JSON中提取信息

时间:2014-09-09 13:59:50

标签: ruby-on-rails ruby

我有一个JSON响应,它以“BQresponse”

中的字符串形式存储
{"kind":"bigquery#queryResponse", "schema":{"fields":[{"name":"Revenue", "type":"INTEGER", "mode":"NULLABLE"}, {"name":"Country", "type":"STRING", "mode":"NULLABLE"}]}, "jobReference":{"projectId":"curious-idea-532", "jobId":"job_S5rTcY2vwEu-amtrxb8NRPWiynU"}, "totalRows":"3", "rows":[{"f":[{"v":"100"}, {"v":"Ireland"}]}, {"f":[{"v":"200"}, {"v":"Netherlands"}]}, {"f":[{"v":"50"}, {"v":"Singapore"}]}], "totalBytesProcessed":"0", "jobComplete":true, "cacheHit":true}   

我正在尝试将其转换为双线响应(以便稍后导出为CSV),看起来完全像这样:

Country||Sum of Revenue|,Ireland,Netherlands,Singapore
Revenue,100,200,50

到目前为止,我已经提取了第一部分,如下所示:

puts BQresponse[/#{D1_mark1}(.*?)#{D1_mark2}/m, 1]+"||"+BQresponse[/#{M1_mark1}(.*?)#{M1_mark2}/m, 1]

接下来我需要提取“爱尔兰,荷兰,新加坡”。但是我不能使用与上面相同的方法,因为字符串更新时可能会有更多或更少的值(可能只有2或5个国家/地区)。

该字符串包含一个部分,其中显示“totalRows”:“3”,“ - 这3是预期国家/地区的数量,我想可以在某个循环中使用/为每种类型。但我不是确定如何最好地接近这一点。

第二行的数字值面临完全相同的问题(每个国家/地区都有一个数字)。第二行的“收入”只是在第一行重复“收入”,删除了“Sum_of_”。

赞赏有关前进方向的建议。

此外,这是一个有效的JSON,如果我完全偏离轨道并且首先将此字符串转换为JSON会更容易,那也没关系。

谢谢!

1 个答案:

答案 0 :(得分:0)

有一个很棒的宝石,json2csv here我以前必须使用它。

要试用它,我会将一个示例JSON响应保存到一个名为sample.json的文件中,然后在您的终端中运行:

json2csv convert sample.json