2015-05-04 4 views
2

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

"[{\"name\"=>\"memorial hospital\", \"number\"=>\"555-555-1212\"}, {\"name\"=>\"other name hospital\", \"number\"=>\"345-234-2342\"}, {\"name\"=>\"\", \"number\"=>\"\"}]" 
+2

Это не JSON. Это результат 'some_array_of_hashes.inspect'. Где вы получаете эту строку? Можете ли вы сказать, что источник более разумный? –

+1

Как сказал @muistooshort, это не JSON. Мы не можем помочь, если вы не дадите нам правильный ввод. Как ваш вопрос непонятен (на самом деле больше как глупость), поэтому нам нужно увидеть настоящую входящую строку JSON. JSON чрезвычайно прост в работе, поэтому вам, вероятно, помогут прочитать другие связанные с Ruby/JSON вопросы. –

+0

Спасибо всем за вашу помощь. Эта структура - это то, что было сохранено в базе данных из моей формы. Оказывается, мне нужно было сериализовать выход перед сохранением. После этого строка, сохраненная в базе данных, находится в правильном формате json (без хеш-ракеты). –

ответ

1

Вот возможная работа Arround:

сначала преобразовать его в правильном формате JSON, выполнив:

s = s.gsub('=>', ':') 

затем разобрать его

JSON.parse s 

вывод должен быть:

=> [{"name"=>"memorial hospital", "number"=>"555-555-1212"}, {"name"=>"other name hospital", "number"=>"345-234-2342"}, {"name"=>"", "number"=>""}] 
2

Я думаю, что ваша строка искажена.

В строке JSON не было бы =>. The key=>value should look like key:value.

Попробуйте следующую строку:

"[{\"name\":\"memorial hospital\", \"number\":\"555-555-1212\"}, {\"name\":\"other name hospital\", \"number\":\"345-234-2342\"}, {\"name\":\"\", \"number\":\"\"}]" 

Это должно работать:

require 'json' 
s = "[{\"name\":\"memorial hospital\", \"number\":\"555-555-1212\"}, {\"name\":\"other name hospital\", \"number\":\"345-234-2342\"}, {\"name\":\"\", \"number\":\"\"}]" 

JSON.parse s 
# => [{"name"=>"memorial hospital", "number"=>"555-555-1212"}, {"name"=>"other name hospital", "number"=>"345-234-2342"}, {"name"=>"", "number"=>""}] 
1

Если вы новичок в JSON, есть некоторые хорошие бесплатные онлайн JSON парсеры/валидаторов вы можете использовать, чтобы проверить свои ... JSON http://json.parser.online.fr/ http://jsonlint.com/

Обратите внимание, что вам нужно будет удалить побег полукокса acter ('\') для этих парсеров.

В этом конкретном случае вы можете исправить свой текст json, заменив '=>' на «:» в тексте json.

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