Ruby 将JSON键值转换为CSV

Ruby 将JSON键值转换为CSV,ruby,json,csv,Ruby,Json,Csv,我的目标是读取一个CSV文件,从该文件的记录中获取每个ID,将每个ID使用到Meetup API URL中,然后使用JSON响应中的特定值创建一个新的CSV文件 以下是我目前掌握的情况: require "net/https" require "uri" require 'csv' require 'json' membersCSV = CSV.foreach('id-members-meetup.csv') do |row| id = row[1] uri = URI.parse("http

我的目标是读取一个CSV文件,从该文件的记录中获取每个ID,将每个ID使用到Meetup API URL中,然后使用JSON响应中的特定值创建一个新的CSV文件

以下是我目前掌握的情况:

require "net/https"
require "uri"
require 'csv'
require 'json'

membersCSV = CSV.foreach('id-members-meetup.csv') do |row|
id = row[1]
uri = URI.parse("https://api.meetup.com/2/members?order=name&member_id=" + id + "&format=json&key=MY_KEY")
http = Net::HTTP.new(uri.host, uri.port)
request = Net::HTTP::Get.new(uri.request_uri)
response = http.request(request)
CSV.open("ghmeetup.csv", "w", {:col_sep => ";"}) do |csv|
  JSON.parse(response.body)["other_services"].each do |single|
    csv << [single["twitter"]["identifier"], single["facebook"]["identifier"], single["linkedin"]["identifier"]]
  end
end
end

有什么想法吗?

通过
\use\u ssl=
HTTP连接启用HTTPS

此代码使用Ruby 2.2.0在我的系统上获得成功响应:

require 'net/http'  # Not HTTPS
key="..."  # Get your personal API key from Meetup
uri = URI.parse("https://api.meetup.com/2/members?order=name&member_id=1&format=json&key=#{key}")
Net::HTTP.start(uri.host, uri.port, use_ssl: true) do |http|
  request = Net::HTTP::Get.new uri
  response = http.request request
  p response.body
end
在Ruby的早期版本中,您需要
要求“net/https”
才能使用https。这是

你能在你的系统上试试上面的代码吗


如果行得通,那太好了。如果它不起作用,那么你可以简化你的问题代码,例如省略CSV、循环、JSON等。

你试过使用http吗?use_ssl=true?Yep:/仍然有同样的错误,我建议你减少你的问题代码。如果需要“net/http”,然后省略CSV、循环和JSON,会发生什么?例如,如果您尝试只获取一个成员,您会得到什么样的响应主体?如果可以,请编辑更多,以用最少的代码触发erorr。此外,还需要将“net/https”更改为“net/http”。您可能希望省略API密钥。
require "uri"
require 'csv'
require 'json'
require 'net/http'

ghCSV = CSV.foreach('id-gh-meetup.csv') do |row|
    id = row[1]
    key="KEY" 
    uri = URI.parse("https://api.meetup.com/2/members?order=name&member_id=#{id}&format=json&key=#{key}")
    Net::HTTP.start(uri.host, uri.port, use_ssl: true) do |http|
    request = Net::HTTP::Get.new uri
    response = http.request request
    parseResponse = JSON.parse(response.body)['results'][0]
    p "working"
      CSV.open("ghmeetup.csv", "w") do |csv|
        p "working 2"       
            parseResponse.each do |single|
                p "working 3"
              csv << single
            end
        end
    end
end
ghmeetup.rb:15:in `block (2 levels) in <main>': undefined method `[]' for nil:NilClass (NoMethodError)
{
results: [
 - {
   - other_services: {
      twitter: {
        identifier: "@HugoAmsellem"
require 'net/http'  # Not HTTPS
key="..."  # Get your personal API key from Meetup
uri = URI.parse("https://api.meetup.com/2/members?order=name&member_id=1&format=json&key=#{key}")
Net::HTTP.start(uri.host, uri.port, use_ssl: true) do |http|
  request = Net::HTTP::Get.new uri
  response = http.request request
  p response.body
end