How to convert a simple hash to json in Perl?

2019-02-04 06:38发布

问题:

I'm using the following code to encode a simple hash

use JSON;

my $name = "test";
my $type = "A";
my $data = "1.1.1.1";
my $ttl  = 84600;

@rec_hash = ('name'=>$name, 'type'=>$type,'data'=>$data,'ttl'=>$ttl);

but I get the following error:

hash- or arrayref expected <not a simple scalar, use allow_nonref to allow this>

回答1:

Your code seems to be missing some significant chunks, so let's add in the missing bits (I'll make some assumptions here) and fix things as we go.

Add missing boilerplate.

#!/usr/bin/perl

use strict;
use warnings;

use JSON;

my $name = "test";
my $type = "A";
my $data = "1.1.1.1";
my $ttl  = 84600;

Make the hash a hash and not an array and don't forget to localise it: my %

my %rec_hash = ('name'=>$name, 'type'=>$type,'data'=>$data,'ttl'=>$ttl);

Actually use the encode_json method (passing it a hashref):

my $json = encode_json \%rec_hash;

Output the result:

print $json;

And that works as I would expect without errors.



回答2:

Try %rec_hash = ... instead. @ indicates a list/array, while % indicates a hash.