Как мне извлечь значение из ответа JSON?

#ruby #json

#ruby #json

Вопрос:

Я пишу несколько тестов на Ruby, используя RestClient. Тест работает нормально, и ответ находится в формате JSON, однако, когда я анализирую JSON и пытаюсь извлечь искомые значения, я получаю сообщение об ошибке IndexError: key not found

ИМО, мой код должен работать. JSON — это:

 {"user":{"@xmlns":{"dvi":"http://xxxx","a":"http://xxxx","$":"http://xxxx"},"link":[{"@rel":"self","$":"http://xxxx"},{"@rel":"user","$":"http://xxxx"},{"@rel":"usage","$":"xxxx"},{"@rel":"repositories","$":"http://xxxx"},{"@rel":"shares","$":"http://xxxx"},{"@rel":"shareMemberships","$":"http://xxxx"}],"phone":{"$":"3518012343001"},"email":{"$":""},"firstName":{"$":"Jim"},"lastName":{"$":"Joe"},"uid":{"$":"91bc7a72bc724e5e9b53e688dd105ed4"},"accountName":{"$":"3518012343001"},"notificationMethod":{"$":"email sms"},"accountStatus":{"$":"Active"},"serviceLevel":{"$":"5"},"repositoryCount":{"$":"1"},"usage":{"allowed":{"$":"5368709120"},"total":{"$":"1024"}},"contactEmail":{"$":"jim@joe.com"}}}
  

и мой код:

 result = jsonabove
jdoc = JSON.parse(result)
notificationMethod = jdoc.fetch("notificationMethod")

return notificationMethod
  

Ответ №1:

Это происходит потому notificationMethod , что ключ не является ключом первого уровня в вашем хэше. После подготовки JSON#parse метода у вас есть хэш только с одним вызываемым ключом user . Вы должны получить значение по этому ключу, а затем применить свой notificationMethod ключ. Это выглядит так:

 require 'json'

result = <<HERE
{"user":{"......"}}
HERE

jdoc = JSON.parse(result)
notificationMethod = jdoc.fetch("user").fetch("notificationMethod")
puts notificationMethod
  

Комментарии:

1. Вовсе нет, рад вам помочь!