Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/facebook/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 创建消息对象解析器_Ruby On Rails_Ruby_Object - Fatal编程技术网

Ruby on rails 创建消息对象解析器

Ruby on rails 创建消息对象解析器,ruby-on-rails,ruby,object,Ruby On Rails,Ruby,Object,我正在接收来自以下web服务的结果: result.body返回: [2] pry(#<User::EmailSettingsController>)> result.body => {"RESULT"=> {"MESSAGES"=> [{"MESSAGE"=> {"TYPE"=>"E", "ID"=>"HRRCF_WD_UI", "NUMBER"=>"025",

我正在接收来自以下web服务的结果:

result.body返回:

[2] pry(#<User::EmailSettingsController>)> result.body
=> {"RESULT"=>
  {"MESSAGES"=>
    [{"MESSAGE"=>
       {"TYPE"=>"E",
        "ID"=>"HRRCF_WD_UI",
        "NUMBER"=>"025",
        "MESSAGE"=>"U kunt maximaal \"5\" jobagents creëren 1",
        "LOG_NO"=>"",
        "LOG_MSG_NO"=>"000000",
        "MESSAGE_V1"=>"5",
        "MESSAGE_V2"=>"1",
        "MESSAGE_V3"=>"",
        "MESSAGE_V4"=>"",
        "PARAMETER"=>"",
        "ROW"=>"0",
        "FIELD"=>"",
        "SYSTEM"=>""}},
     {"MESSAGE"=>
       {"TYPE"=>"E",
        "ID"=>"HRRCF_WD_UI",
        "NUMBER"=>"025",
        "MESSAGE"=>"U kunt maximaal \"5\" jobagents creëren 2",
        "LOG_NO"=>"",
        "LOG_MSG_NO"=>"000000",
        "MESSAGE_V1"=>"5",
        "MESSAGE_V2"=>"2",
        "MESSAGE_V3"=>"",
        "MESSAGE_V4"=>"",
        "PARAMETER"=>"",
        "ROW"=>"0",
        "FIELD"=>"",
        "SYSTEM"=>""}},
     {"MESSAGE"=>
       {"TYPE"=>"E",
        "ID"=>"HRRCF_WD_UI",
        "NUMBER"=>"025",
        "MESSAGE"=>"U kunt maximaal \"5\" jobagents creëren 3",
        "LOG_NO"=>"",
        "LOG_MSG_NO"=>"000000",
        "MESSAGE_V1"=>"5",
        "MESSAGE_V2"=>"3",
        "MESSAGE_V3"=>"",
        "MESSAGE_V4"=>"",
        "PARAMETER"=>"",
        "ROW"=>"0",
        "FIELD"=>"",
        "SYSTEM"=>""}}]}}
我不知道这是否可能或如何做到这一点任何建议,让我开始欢迎

编辑1: 在lib中创建我的类:

class MessageParser
    def self.parse(result)

    end 
end

像这样的方法应该会奏效:

class ParsedMessages
  include Enumerable
  attr_reader :messages

  def initialize(data)
    @messages = extract_messages_from_data(data)
  end

  def extract_messages_from_data(data)
    # TODO: Parse data and return message objects
  end

  def each &block  
    @messages.each do |message|
      if block_given?
        block.call message
      else  
        yield message
      end
    end  
  end

end

现在,您可以使用
ParsedMessages
上的所有方法,例如
每个
查找
映射
等等。

这基本上可以满足您的需要,使用一个简单的开放结构来创建一个消息类,该类具有消息散列中每个键的访问器

require 'ostruct'

class MessageParser
  Message = Struct.new(:type, :id, :number, :message, :log_no, :log_msg_no, :message_v1, :message_v2, :message_v3, :message_v4, :parameter, :row, :field, :system)

  attr_reader :messages
  def initialize(data)
    @data = data.fetch("MESSAGES",[])
    @messages = []
    parse_data
  end

  private
  def parse_data
    @data.each do | msg |
      message = Message.new
      msg.fetch("MESSAGE",{}).each do |key, value|
        message[key.downcase.to_sym] = value
      end
      @messages << message
    end
  end
end

parser = MessageParser.new(result.body["RESULT"])
parser.messages.each do |message|
  puts message.message
  puts message.type
end
需要“ostruct”
类消息分析器
Message=Struct.new(:type,:id,:number,:Message,:log_no,:log_msg_no,:Message_v1,:Message_v2,:Message_v3,:Message_v4,:参数,:行,:字段,:系统)
属性读取器:消息
def初始化(数据)
@data=data.fetch(“消息”,[])
@消息=[]
解析数据
结束
私有的
解析数据
@data.each do| msg|
message=message.new
fetch(“MESSAGE”,{})。每个do |键,值|
消息[key.downcase.to_sym]=值
结束

@留言谢谢先生!工作起来很有魅力!
require 'ostruct'

class MessageParser
  Message = Struct.new(:type, :id, :number, :message, :log_no, :log_msg_no, :message_v1, :message_v2, :message_v3, :message_v4, :parameter, :row, :field, :system)

  attr_reader :messages
  def initialize(data)
    @data = data.fetch("MESSAGES",[])
    @messages = []
    parse_data
  end

  private
  def parse_data
    @data.each do | msg |
      message = Message.new
      msg.fetch("MESSAGE",{}).each do |key, value|
        message[key.downcase.to_sym] = value
      end
      @messages << message
    end
  end
end

parser = MessageParser.new(result.body["RESULT"])
parser.messages.each do |message|
  puts message.message
  puts message.type
end