7
votes

Décodage Hash de Json-String à Perl

Pourquoi cela ne fonctionne-t-il pas? XXX PRE>

I Obtenir l'erreur: P>

my $myHashEncoded = encode_json \%myHash;
my $myHashDecoded = decode_json($enableInputEncoded);


3 commentaires

Quel module obtenez-vous encod_json et décod_json de?


J'ai inclus Utiliser Json;


Vous pouvez déréférence hachage, mon% myhashédecoded =% {décodé_json ($ activéinpooded)};


4 Réponses :


4
votes

Vous codez sur un référence em> à un hachage ( encod_json \% myhash code>), ce qui est correct. Donc, lorsque vous décodez votre chaîne JSON, vous recevez une référence à un hachage. Préparez un % code> sigil à une référence de hachage à la déréférence IT.

$myHashReferenceDecoded = decode_json($myHashReferenceEncoded);
%myHashDecoded = %$myHashReferenceDecoded;


0 commentaires

13
votes

En supposant que vous utilisez json.pm, La documentation indique :

L'opposé de EnCode_Json: attend une chaîne UTF-8 (binaire) et tente d'analyser que comme un texte JSON codé UTF-8, renvoyant la référence résultante p>. P>. P>. blockQuote>

Donc, vous revenez ce que vous avez mis. Vous mettez dans un hashref et vous obtenez un hashref dos. P>

Si vous voulez un hachage régulier, alors vous voulez juste Déréférence, comme vous le feriez d'autres HASHREF: P>

my $myHashRefDecoded = decode_json($myHashEncoded);
my %myHashDecoded = %$myHashRefDecoded;


2 commentaires

Merci pour la réponse rapide. Et désolé pour mon ignorance concernant la documentation.


Cela m'a vraiment aidé à grok certains aspects de Perl qui (comme nouveau venu) n'avaient pas beaucoup de sens pour moi. Merci!



1
votes

L'API JSON est cohérente. Si vous utilisez une référence à un hachage lorsque vous codez, vous obtenez également une référence de hachage lors du décodage. Donc, si vous souhaitez stocker le résultat dans une variable de hachage pure, vous devez dréerence du résultat de décod_json code> avec % {...} code>.

solution:

my $myHashEncoded = encode_json \%myHash;
my %myHashDecoded = %{ decode_json($myHashEncoded) };


0 commentaires

2
votes

Sur la ligne suivante, vous faites deux choses: vous créez une référence au hasch ( \ code>), et vous encodez le résultat ( encod_json code>):

my $myHashDecoded = decode_json($myHashEncoded);


0 commentaires