从Perl中的JSON-String解码哈希

Lin*_*nus 4 perl hash json

为什么这不起作用?

my $myHashEncoded = encode_json \%myHash;
my %myHashDecoded = decode_json($myHashEncoded);
Run Code Online (Sandbox Code Playgroud)

我收到错误:

Reference found where even-sized list expected at ...
Run Code Online (Sandbox Code Playgroud)

所以我改成了:

my $myHashEncoded = encode_json \%myHash;
my $myHashDecoded = decode_json($enableInputEncoded);
Run Code Online (Sandbox Code Playgroud)

但后来显然%myHash不一样了$myHashDecoded.

如何从JSON字符串恢复正确的哈希?

Que*_*tin 10

假设您使用的是JSON.pm,文档说:

与encode_json相反:期望UTF-8(二进制)字符串并尝试将其解析为UTF-8编码的JSON文本,并返回结果引用.

所以你要收回你放入的内容.你正在放入一个hashref,然后你就会得到一个hashref.

如果你想要一个常规哈希,那么你只需要取消引用它就像你对任何其他hashref一样:

my $myHashRefDecoded = decode_json($myHashEncoded);
my %myHashDecoded = %$myHashRefDecoded;
Run Code Online (Sandbox Code Playgroud)