Archief - ROR Parser class schrijven

Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.

AliChemicali

Legacy Member
Hoi!

Ik krijg van mijne webservice het volgende resultaat terug:

Code:
[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"=>""}}]}}

Nu is mijn vraag of je iets kunt maken dat het volgende doet in pseudocode:

Code:
message_list = ParseMessageObject(result.body)
message_list.each do |message|
 puts message.message
 puts message.type
end

bealzebub

Legacy Member
T is zo basic Ruby 101 dat ik gewoon dirty example code ga geven, aan jou om het mooi te schrijven (en eigenlijk zou je t nog beter in een Struct of zelfs een dedicated mapper class moeten steken).

Code:
# Gewoon voor t gemak van lezen
content = result.body["RESULT"]["MESSAGES"]

message_list = content.map do |item|
  # De eigenlijke hash met inhoud zit in de MESSAGE property
  message = item["MESSAGE"]

  # Zet van de hash alle keys om naar lowercase symbols
  symboled_message = Hash[message.map do |k,v|
    key = k.downcase.to_sym
    # type until Ruby 2.0 is een protected word
    # (Ruby 1.8+ geeft een deprecation warning, maar je kan type nog altijd niet overriden)
    # We maken er dus message_type van
    key = :message_type if key == :type
    [key, v]
  end]

  # http://www.ruby-doc.org/stdlib-1.9.3/libdoc/ostruct/rdoc/OpenStruct.html
  OpenStruct.new(symboled_message)
end

message_list.each do |message|
 puts message.message
 puts message.message_type
end
Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.
Terug
Bovenaan