如何编码的JSON解析器中的对象提供的所有信息?

问题描述 投票:1回答:3

我很新的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

这如果财产解析器缺失仍然失败。 (

ruby-on-rails ruby rubygems whois whois-ruby
3个回答
© www.soinside.com 2019 - 2024. All rights reserved.