2013-08-11 3 views
-2

Я использую mailgun для отправки электронной почты. У него есть api для добавления функции «Отменить подписку». Я использую его в приложении rails.Извлечь вложенный ключ из строковой структуры данных

Используя эту команду, я получаю список всех отписавшихся пользователей, т. Е. Записи в таблице отписных писем отписки.

RestClient.get "https://api:key-3ax6xnjp29jd6fds4gc373sgvjxteol0" "@api.mailgun.net/v2/samples.mailgun.org/unsubscribes" 

Я сохраняю его вывод в @unsubscriber. Так что мой контроллер имеет:

@unsubscribers = RestClient.get "https://api:key-3ax6xnjp29jd6fds4gc373sgvjxteol0" "@api.mailgun.net/v2/samples.mailgun.org/unsubscribes" 

Когда я вывода изображения в режиме, <% = @unsubscribers%> я получаю строку:

{ 
    "total_count": 1, 
    "items": [{ 
    "created_at": "Sun, 11 Aug 2013 08:07:22 GMT", 
    "tag": "*", 
    "id": "sdfsdfw12423535456", 
    "address": "[email protected]" 
    }] 
} 

Как я хочу, чтобы удалить отписался письма из моей базы данных, я хотите только электронные письма в @unsubscribers. Но он содержит целую строку.

Я не получаю, как извлечь электронную почту из строки выше, чтобы у меня был список писем в @unsubscribers, и я могу удалить их из своего приложения.

Может кто-нибудь мне помочь?

+0

@sawa Да, но я ищу только адрес, а не полную строку. – user2206724

+0

Я добавил больше объяснений, чтобы сделать вопрос понятным. Позвольте мне знать, требуется ли дальнейшее объяснение. – user2206724

ответ

-1

@unsubscriber - это хэш. items - массив хэшей. Вам нужно получить первый элемент, используя [0]. Тогда вам нужно значение address

@unsubscriber["items"][0]["address"] 
+0

он возвращает ноль. Вывод @unsubscriber ["items"] - это элемент. Вывод @unsubscriber ["items"] [0] - "i", а вывод @unsubscriber ["items"] [0] ["address"] равен нулю. – user2206724

1

Если вы пытаетесь получить доступ к адресу первого абонента:

@unsubscriber['items'].first['address'] 

Более безопасный код:

((@unsubscriber['items'] || []).first || {})['address'] 

Если вы пытаетесь собрать все адреса:

(@unsubscriber['items'] || []).map{|s| ['address']} 
+0

дает неопределенный метод 'map 'для« items »: String – user2206724

+0

Что происходит, когда вы пытаетесь использовать более безопасную версию? Это также может произойти, если '@ unsubscriber'' nil'. –

+0

№ @unsubscriber не ноль. Его вывод я написал в вопросе. Для более безопасной версии он дает нуль. – user2206724