2015-12-21 92 views
-6

我有一個從API調用的數組。返回的數據就像這樣(爲顯示目的而整理)。請幫我訪問嵌套數組

[ 
    { 
     "MessageThreadID": 30044, 
     "CustomerID": 433, 
     "MessageType": 1, 
     "Subject": "What is my account balance?", 
     "OpenDate": "2015-12-21T10:36:00", 
     "Closed": false, 
     "ClosedDate": null, 
     "Messages": [ 
      { 
       "IBMessageID": 30076, 
       "MessageThreadID": 30044, 
       "MessageText": "What is my account balance?", 
       "FromCustomer": true, 
       "UserID": null, 
       "Date": "2015-12-21T10:36:00" 
      }, 
      { 
       "IBMessageID": 30077, 
       "MessageThreadID": 30044, 
       "MessageText": "£1230.00", 
       "FromCustomer": false, 
       "UserID": 1, 
       "Date": "2015-12-21T10:36:00" 
      }, 
      { 
       "IBMessageID": 30078, 
       "MessageThreadID": 30044, 
       "MessageText": "Thanks you", 
       "FromCustomer": true, 
       "UserID": null, 
       "Date": "2015-12-21T10:37:00" 
      } 
     ] 
    } 
] 

從這我在我的助手中使用以下內容來調用API並返回此數據。

def contact_messages_threads(customer_id) 

    customer_id = @customer.id 
    response = get_call('/Messages/GetOpenedMessages/' + customer_id.to_s) 
    response = JSON.parse(response.body) 

    @openmessagethreads = {} 
    @openmessagethreads = response.map do |openmessagethread| 
    Contact.new(openmessagethread) 
    end 

    return @openmessagethreads 

end 

我的聯繫人模式如下所示,其中定義了不同的部分。

class Contact 
    attr_accessor :message_customer_ID, :message_type, :message_subject, :message_source, :message_thread_ID, :messages, :messages_test, :message_text, :from_customer, 
    :message_user_id, :message_date, :openmessagethreads 
    attr_reader :messages 

    def initialize(options) 

    @message_customer_ID  = options['CustomerID'].to_s 
    @message_type    = options['MessageType'].to_s 
    @message_subject   = options['Subject'].to_s 
    @message_source    = options['Closed'].to_s 
    @message_thread_ID   = options['MessageThreadID'].to_s 
    @messages     = options['Messages'] 
    @messages_test    = options['Messages']['IBMessageID'].to_s 
    @message_text    = options['MessageText'] 
    @from_customer    = options['FromCustomer'] 
    @message_user_id   = options['UserID'] 
    @message_date    = options['OpenDate'] 
    @openmessagethreads = {} 

    end 

end 

最後,在我看來,我調用數據,像這樣:

- contact_messages_threads(@customer.id).each do |openmessagethread| 
    = openmessagethread.message_subject 

從這個我可以很方便地調用如IBMessageThreadID,客戶ID等數據,但是我不能訪問的消息陣列和什麼包含在內。當我在過去的兩個月裏得到了一分鐘的空閒時間時,我一直在這方面工作,但仍然無法破解它。我想我可能需要改變我的模型,API調用或可能查看,但一直在嘗試我已經在網上找到的不同變化,但似乎無法破解它。任何幫助是極大的讚賞。

+0

通常它是一個好主意,共享足夠的代碼來驅動重點 - 換句話說,演示你正面臨的問題。對您的問題的反對意見可能是由於代碼量過大以及您所面臨的問題不明確。 –

回答

1

要訪問該數組,您需要使用數組索引。

而不是使用

@messages_test    = options['Messages']['IBMessageID'].to_s 

你需要使用,訪問到第一個元素的數組options['Messages']陣列,下面的代碼

@messages_test    = options['Messages'][0]['IBMessageID'].to_s 

可以遍歷數組,如果你願意的,通過使用

options['Messages'] each do |item| 
    puts item["IBMessageID"] # for illustration 
end 
+0

感謝您的輸入。如你所說,然而添加選項['Messages'] [0] ['IBMessageID'] ._s到模型導致我的問題。再次拿出它,它工作正常,所以把它放出來,除非你有任何理由保持它。無論如何,它的工作,所以感謝您的幫助。不能相信這很容易,但主要的一點是它以直接的方式解釋。 – user3385136