0

JSON/RUBY 的新手。我有一个返回 JSON 字符串的 Rest 服务,我想将其解析为 Ruby 类。这是推荐的吗?我尝试了以下示例并收到错误-无法将字符串转换为整数。这是针对我正在开发的 rhomobile 应用程序。我在想 POJO--> JSON--> Ruby。任何意见,将不胜感激。

Ruby

  @@get_result = @params['body']
     puts "@@get_result : #{@@get_result}"

     data2 =@@get_result

     cust1 = data2["PolicyList"].map { |rd| PolicyList.new(rd["policyNbr"], rd["systemId"], rd["insuredName"], 
                      rd["type"], rd["statusCd"], rd["statusDes"], rd["payorZipcode"], 
                      rd["lastPaymentDate"], rd[lastPaymentAmount], rd["pastDueDate"], rd["pastDueAmount"], 
                      rd["currentDueDate"], rd["currentDueAmount"], rd["eft"], 
                      rd["suspenseAmt"], rd["expireTime"]) }

班级

  class PolicyList  
       attr_accessor :policyNbr, :systemId, :insuredName,
            :type, :statusCd, :statusDes, :payorZipcode,
            :lastPaymentDate,:lastPaymentAmount,:pastDueDate,
            :pastDueAmount,:currentDueDate,:currentDueAmount,:eft,
            :suspenseAmt,:expireTime


       def initialize(policyNbr,             systemId,insuredName,type,statusCd,statusDes,payorZipcode,lastPaymentDate,lastPaymentAmount,
             pastDueDate,pastDueAmount,currentDueDate,currentDueAmount,eft,suspenseAmt,expireTime)
   @systemId = systemId
   @insuredName = insuredName
   @type = type  
   @statusCd = statusCd  
    @statusDes = statusDes
   @payorZipcode = payorZipcode
   @lastPaymentDate =  lastPaymentDate
   @lastPaymentAmount = lastPaymentAmount
   @pastDueDate = pastDueDate 
   @pastDueAmount = pastDueAmount
   @currentDueDate = currentDueDate
   @currentDueAmount = currentDueAmount
   @eft = eft
   @suspenseAmt = suspenseAmt
   @expireTime = expireTime
  end

 end    

返回的 JSON

  [{"policyNbr":"0000001","systemId":"MB","insuredName":"JOHN DOE ","type":"MEMBERSHIP","statusCd":"01","statusDes":"PAID","payorZipcode":"99999","lastPaymentDate":"07/12/2012","lastPaymentAmount":25.00,"pastDueDate":"","pastDueAmount":0.00,"currentDueDate":"","currentDueAmount":0.00,"eft":false,"suspenseAmt":false,"expireTime":1362152384971},{"policyNbr":"0000002","systemId":"PC","insuredName":"JOHN DOE","type":"AUTO","statusCd":"01","statusDes":"PAID","payorZipcode":"99999","lastPaymentDate":"02/15/2013","lastPaymentAmount":308.50,"pastDueDate":"","pastDueAmount":0.00,"currentDueDate":"","currentDueAmount":0.00,"eft":false,"suspenseAmt":false,"expireTime":0},{"policyNbr":"0000003","systemId":"PC","insuredName":"JOHN DOE","type":"HOME","statusCd":"01","statusDes":"PAID","payorZipcode":"99999","lastPaymentDate":"09/05/2012","lastPaymentAmount":149.00,"pastDueDate":"","pastDueAmount":0.00,"currentDueDate":"","currentDueAmount":0.00,"eft":false,"suspenseAmt":false,"expireTime":0}]
4

1 回答 1

0

You're getting an array of PolicyList objects, but there is no key called 'PolicyList'. I think you need this:

cust1 = data2.map { |rd| PolicyList.new(rd["policyNbr"], rd["systemId"], rd["insuredName"],
                rd["type"], rd["statusCd"], rd["statusDes"], rd["payorZipcode"],
                rd["lastPaymentDate"], rd['lastPaymentAmount'], rd["pastDueDate"], rd["pastDueAmount"],
                rd["currentDueDate"], rd["currentDueAmount"], rd["eft"],
                rd["suspenseAmt"], rd["expireTime"]) }

To make it easier for you. Here is a complete example.

class PolicyList
     attr_accessor :policyNbr, :systemId, :insuredName,
          :type, :statusCd, :statusDes, :payorZipcode,
          :lastPaymentDate,:lastPaymentAmount,:pastDueDate,
          :pastDueAmount,:currentDueDate,:currentDueAmount,:eft,
          :suspenseAmt,:expireTime


       def initialize(policyNbr,             systemId,insuredName,type,statusCd,statusDes,payorZipcode,lastPaymentDate,lastPaymentAmount,
             pastDueDate,pastDueAmount,currentDueDate,currentDueAmount,eft,suspenseAmt,expireTime)
   @systemId = systemId
   @insuredName = insuredName
   @type = type
   @statusCd = statusCd
    @statusDes = statusDes
   @payorZipcode = payorZipcode
   @lastPaymentDate =  lastPaymentDate
   @lastPaymentAmount = lastPaymentAmount
   @pastDueDate = pastDueDate
   @pastDueAmount = pastDueAmount
   @currentDueDate = currentDueDate
   @currentDueAmount = currentDueAmount
   @eft = eft
   @suspenseAmt = suspenseAmt
   @expireTime = expireTime
  end

end


require 'json'
json = <<-JSON
  [{"policyNbr":"0000001","systemId":"MB","insuredName":"JOHN DOE ","type":"MEMBERSHIP","statusCd":"01","statusDes":"PAID","payorZipcode":"99999","lastPaymentDate":"07/12/2012","lastPaymentAmount":25.00,"pastDueDate":"","pastDueAmount":0.00,"currentDueDate":"","currentDueAmount":0.00,"eft":false,"suspenseAmt":false,"expireTime":1362152384971},{"policyNbr":"0000002","systemId":"PC","insuredName":"JOHN DOE","type":"AUTO","statusCd":"01","statusDes":"PAID","payorZipcode":"99999","lastPaymentDate":"02/15/2013","lastPaymentAmount":308.50,"pastDueDate":"","pastDueAmount":0.00,"currentDueDate":"","currentDueAmount":0.00,"eft":false,"suspenseAmt":false,"expireTime":0},{"policyNbr":"0000003","systemId":"PC","insuredName":"JOHN DOE","type":"HOME","statusCd":"01","statusDes":"PAID","payorZipcode":"99999","lastPaymentDate":"09/05/2012","lastPaymentAmount":149.00,"pastDueDate":"","pastDueAmount":0.00,"currentDueDate":"","currentDueAmount":0.00,"eft":false,"suspenseAmt":false,"expireTime":0}]
JSON


@@get_result = JSON.parse(json)

puts "@@get_result : #{@@get_result}\n\n"

data2 =@@get_result

cust1 = data2.map { |rd| PolicyList.new(rd["policyNbr"], rd["systemId"], rd["insuredName"],
                rd["type"], rd["statusCd"], rd["statusDes"], rd["payorZipcode"],
                rd["lastPaymentDate"], rd['lastPaymentAmount'], rd["pastDueDate"], rd["pastDueAmount"],
                rd["currentDueDate"], rd["currentDueAmount"], rd["eft"],
                rd["suspenseAmt"], rd["expireTime"]) }


puts cust1.inspect
于 2013-03-01T16:08:45.090 回答