【发布时间】:2016-11-10 12:17:29
【问题描述】:
我正在尝试通过 Ruby 将以下 JSON 转换为 CSV,但我的代码遇到了问题。我边走边学,感谢您的帮助。
require 'json'
require 'net/http'
require 'uri'
require 'csv'
uri = 'https://www.mapquestapi.com/search/v2/radius?key=Imjtd%7Clu6t200zn0,bw=o5-layg1&radius=3000&callback=processPOIs&maxMatches=4000&origin=40.7686973%2C-73.9918181&hostedData=mqap.33882_stores_prod%7Copen_status%20=%20?%20OR%20open_status%20=%20?%20OR%20open_status%20=%20?%7CExisting,Coming%20Soon,New%7C'
response = Net::HTTP.get_response(URI.parse(uri))
struct = JSON.parse(response.body.scan(/processPOIs\((.*)\);/).first.first)
CSV.open("output.csv", "w") do |csv|
JSON.parse(struct).read.each do |hash|
csv << hash.values
end
end
我收到的错误是:
from c:/RailsInstaller/Ruby2.2.0/lib/ruby/gems/2.2.0/gems/json-1.8.3/lib/json/common.rb:155:in `new'
from c:/RailsInstaller/Ruby2.2.0/lib/ruby/gems/2.2.0/gems/json-1.8.3/lib/json/common.rb:155:in `parse'
from test.rb:14:in `block in <main>'
from c:/RailsInstaller/Ruby2.2.0/lib/ruby/2.2.0/csv.rb:1273:in `open'
from test.rb:13:in `<main>'
我正在尝试从以下链接中获取所有数据并将其放入一个 CSV 文件中,以便稍后进行分析。 https://www.mapquestapi.com/search/v2/radius?key=Imjtd%7Clu6t200zn0,bw=o5-layg1&radius=3000&callback=processPOIs&maxMatches=4000&origin=40.7686973%2C-73.9918181&hostedData=mqap.33882_stores_prod%7Copen_status%20=%20?%20OR%20open_status%20=%20?%20OR%20open_status%20=%20?%7CExisting,Coming%20Soon,New%7C
【问题讨论】:
-
您遇到了什么具体问题?
-
只是没有写入 CSV。我不断收到指向 JSON.parse(struct) 行的错误。
-
您遇到什么错误?您确定
response.body是您所期望的吗?你检查过response.body.scan(/processPOIs\((.*)\);/)确实是 JSON 吗? -
收到错误:在“
中的块”中。正如我所提到的,我对所有这些都是新手。我认为 response.body.scan 将 JSON 转换为文本字符串。 -
错误不止于此。
'where is pancakes house?'是字符串而不是 JSON,'{"where is":"pancakes house?"}'是字符串和 JSON。