perl - 为什么会出现此错误?

标签 perl json

这是我的代码

#!/usr/bin/perl -T

use CGI;
use CGI::Carp qw(fatalsToBrowser);
use CGI qw(:standard);
use JSON;
use utf8;
use strict;
use warnings;


# ... ;

my $cgi = CGI->new;
$cgi->charset('UTF-8');

my @owners = map { s/\s*//g; $_ } split ",", $cgi->param('owner');
my @users  = map { s/\s*//g; $_ } split ",", $cgi->param('users');


my $json = JSON->new;
$json = $json->utf8;


my %user_result = ();
foreach my $u (@users) {
    $user_result{$u} = $db1->{$u}{displayName};
}

my %owner_result = ();
foreach my $o (@owners) {
    $owner_result{$o} = $db2{$o};
}

$json->{"users"}   = $json->encode(\%user_result);
$json->{"owners"}  = $json->encode(\%owner_result);

$json_string = to_json($json);

print $cgi->header(-type => "application/json", -charset => "utf-8");
print $json_string;

和这些行

$json->{"users"}   = $json->encode(\%user_result);
$json->{"owners"}  = $json->encode(\%owner_result);

给出错误

Not a HASH reference

为什么我会得到那个?

如何解决?

最佳答案

JSON 对象(至少在 XS 版本中,见下文)只是一个 SCALAR 引用,因此您不能对其执行哈希引用操作。实际上,您遇到的大多数 Perl 对象都是散列引用,但情况并非总是如此。

我不确定您试图通过使用 JSON 对 JSON 对象进行编码来完成什么。您需要对 JSON 对象的内部进行编码吗?或者您只需要序列化用户和所有者数据?在后一种情况下,您应该只使用一个新的哈希引用来保存该数据并传递给 JSON。如果您确实需要对 JSON 对象进行编码,那么使用 JSON::PP(JSON 模块的“纯 Perl”变体)可能会好一些,它确实使用哈希引用。

关于perl - 为什么会出现此错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6020142/

相关文章:

sql-server - 如何使用Perl获取存储过程结果?

perl - 使用 perl XML::LibXML 解析

javascript - 如何在 javascript 中创建 json 对象的哈希表?

javascript - 如何动态访问递增的json值

xml - 使用 lift 将 xml 转换为 Json 的行为很奇怪

javascript - 如何从 JavaScript 中的 Razor 模型对象获取 JSON 对象

mysql - 如何从 Perl 连接到 MySQL?

perl - Perl BEGIN block 会传播病毒或丢失数据吗?

perl - 从字符串中删除引号

javascript - 检查字符串是否在 json 对象中