我很新的Ruby和Rails。我试图输出解析出的所有WHOIS信息以JSON输出。我有以下几点:
class WhoisController < ApplicationController
def index
c = Whois::Client.new
record = c.lookup("google.com")
parser = record.parser
created = parser.created_on
msg = {:created => created}
render :json => msg
end
end
输出:
{"created":"1997-09-15T00:00:00.000-07:00"}
但是,语法分析器提供了很多详细信息....不知道所有可用的领域,我怎么甩所有的键/值JSON?
我试过了:
class WhoisController < ApplicationController
def index
c = Whois::Client.new
record = c.lookup("google.com")
parser = record.parser
msg = {:whois => parser}
render :json => msg
end
end
但最终得到:
SystemStackError in WhoisController#index
编辑:
我也试过:
parser.attributes.each do |attr_name, attr_value|
puts attr_name
end
但最终得到另一个错误:
undefined method `attributes' for #<Whois::Parser:0x00007fc030d74018>
Python和围棋(通过反射)可以做到这一点。什么是Ruby的方式来实现这一目标?
编辑:
class WhoisController < ApplicationController
def index
c = Whois::Client.new
record = c.lookup("google.com")
parser = record.parser
msg = {}
for x_prop in Whois::Parser::PROPERTIES
msg[x_prop] = parser.send(x_prop)
end
render :json => msg
end
end
这只有当分析器上存在的所有属性。然而,一些域名不具有的所有特性,并会导致:
Unable to find a parser for property `registrant_contacts'
然后,我只尝试,如果该属性存在,将其设置:
msg = {}
for x_prop in Whois::Parser::PROPERTIES
parser.has_attribute?(:x_prop)
msg[x_prop] = parser.send(x_prop)
end
render :json => msg
我得到另一个错误:
undefined method `has_attribute?'
编辑#3:
我也试过:
msg = {}
for prop in Whois::Parser::PROPERTIES
msg[prop] = parser.send(prop) if parser.respond_to?(prop)
end
render :json => msg
这如果财产解析器缺失仍然失败。 (