2015-01-28 2 views
2

мне нужно, чтобы получить некоторые значения из записи JSon и извлекая как нижеиспользование функции .try с .map функции рубина

curr_json_doc['title']['genre'].map { |s| s['name'] }.join(',') 

Но для некоторых записей curr_json_doc [ «титул»] [ «жанр»] может быть пустым. Поэтому я хочу использовать функцию try для map и join().

Я попытался, как показано ниже

curr_json_doc['title']['genre'].try(:map, { |s| s['name'] }).try(:join, (',')) 

но не работал.

+1

Что вы подразумеваете под "это не сработало"? Пожалуйста, укажите * точное сообщение об ошибке, которое вы получаете * в самом вопросе *. –

ответ

0

Просто удалите пустые строки, а затем карту. Вы можете использовать delete_if, чтобы удалить пробелы.

curr_json_doc['title']['genre'].delete_if(&:empty?).map {|s| s['name'] }.join(','); 
6

Вы не правильно передаете блок. Блоки передаются методы внешнего аргумента скобкой:

curr_json_doc['title']['genre'].try(:map) { |s| s['name'] }.try(:join, ',') 
+0

@ rubyist Вы можете принять это как ответ своего вопроса – Abhi

1

Вы можете использовать Array(), если вы не уверены, если массив, один элемент или ноль возвращается:

Array(curr_json_doc['title']['genre']).map { |s| s['name'] }.join(',') 

Обратите внимание: изменение slighly потому что он возвращает пустую строку вместо nil, если curr_json_doc['title']['genre'] - nil.

Смежные вопросы