79 votes

Ruby JSON parse changes Hash keys

Disons que j'ai ce Hash :

{
  :info => [
    {
        :from => "Ryan Bates",
        :message => "sup bra",
        :time => "04:35 AM"
    }
  ]
}

Je peux appeler le tableau d'informations en faisant hash[:info] .

Lorsque je transforme ce fichier en JSON (JSON.generate), puis que je l'analyse (JSON.parse), j'obtiens ce hachage :

{
  "info" => [
    {
        "from" => "Ryan Bates",
        "message" => "sup bra",
        "time" => "04:35 AM"
    }
  ]
}

Maintenant, si j'utilise hash[:info] il renvoie nil mais pas si j'utilise hash["info"] .

Comment cela se fait-il ? Et y a-t-il un moyen de corriger cette incompatibilité (à part l'utilisation de clés de type chaîne de caractères dès le départ) ?

1voto

anonymousxxx Points 4185

Vous ne pouvez pas utiliser cette option comme suit

ActiveSupport::JSON.decode(str_json, symbolize_names: true)

Dans Rails 4.1 ou plus récent, ActiveSupport::JSON.decode n un hachage d'options pour MultiJSON. MultiJSON a atteint sa fin de vie et a été supprimé.

Vous pouvez utiliser symboliser les clés pour le gérer. Attention : Cela ne fonctionne que pour les chaînes JSON analysées en hachage.

ActiveSupport::JSON.decode(str_json).symbolize_keys

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X