2011-10-28 4 views
2

J'écris quelques tests dans Ruby en utilisant RestClient. Le test fonctionne bien et la réponse est en JSON mais quand j'analyse le JSON et essaie d'extraire les valeurs que je cherche, j'obtiens une erreur en disant IndexError: key not foundComment extraire une valeur d'une réponse JSON?

IMO, mon code devrait fonctionner. Le JSON est:

{"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":{"$":"3518"},"email":{"$":""},"firstName":{"$":"Jim"},"lastName":{"$":"Joe"},"uid":{"$":"91bc7a72bc724e5e9b53e688dd105ed4"},"accountName":{"$":"3518"},"notificationMethod":{"$":"email sms"},"accountStatus":{"$":"Active"},"serviceLevel":{"$":"5"},"repositoryCount":{"$":"1"},"usage":{"allowed":{"$":"5368709120"},"total":{"$":"1024"}},"contactEmail":{"$":"[email protected]"}}} 

et mon code est:

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

return notificationMethod 

Répondre

4

qui se passe parce que la clé notificationMethod n'est pas la première clé de niveau dans votre hachage. Après avoir préparé la méthode JSON#parse, vous avez un hachage avec une seule clé appelée user. Vous devriez obtenir la valeur avec cette clé et ensuite appliquer votre clé notificationMethod. Cela ressemble à ceci:

require 'json' 

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

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

C'est tout! Merci un million! – Adrian

+0

Pas du tout, content de vous aider! – WarHog

Questions connexes