преобразовать параметр запроса массива хэшей в хэш рубина - PullRequest
1 голос
/ 23 февраля 2011

У меня есть следующие параметры запроса:

"mappings"=>"[{ \"spec_id\" => \"1\",
 \"item_name\" => \"sku\"}|{ \"spec_id\" => \"2\",
 \"item_name\" => \" productname\"}|{ \"spec_id\" => \"4\",
 \"item_name\" => \" price\"}]"

Я хотел бы знать, как я могу разобрать элементы в хешах.

Первое, что я делаю, это

mappings = params[:mapping][:mappings].split("|")

mappings.each do |map|
   # don't know how to create the hashes
end

Я бы предпочел разделить на "," вместо "|" если возможно, и я не уверен на 100%, если параметр запроса в правильном формате. Если это не так, пожалуйста, дайте мне знать, и я изменю это.

1 Ответ

0 голосов
/ 23 февраля 2011

Чтобы разобрать эту строку, я бы сделал следующее:

str = "[{ \"spec_id\" => \"1\",
 \"item_name\" => \"sku\"}|{ \"spec_id\" => \"2\",
 \"item_name\" => \" productname\"}|{ \"spec_id\" => \"4\",
 \"item_name\" => \" price\"}]"

mappings = JSON.parse(str.gsub(/}\s*\|\s*{/, '},{').gsub(/\s*\=\>/, ':'))

Это в основном преобразует то, что у вас есть, в строку JSON, удалив '|' символы и преобразование '=>' в ':'. Когда вы, наконец, проанализируете результат, вы будете анализировать JSON, и вы получите хороший Ruby Hash:

[{"spec_id"=>"1", "item_name"=>"sku"}, {"spec_id"=>"2", "item_name"=>" productname"}, {"spec_id"=>"4", "item_name"=>" price"}]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...