perl - 在 perl 中将哈希推入数组,结果无法理解
问题描述
为什么会这样。。
my @menu;
my %el1 = ("element1" => "hello");
push @menu, \%el1;
my %el2 = ("element2" => "world");
push @menu, \%el2;
print to_json({"menu", @menu});
生产这个..
{
"menu": {
"element1": "hello"
},
"HASH(0x18e2280)": null
}
而不是这个..
{
"menu": {
"element1": "hello",
"element2": "world"
}
}
解决方案
您已将两个哈希引用推送到@menu
. 因此,当您运行此代码时:
print to_json({"menu", @menu});
就像你跑了一样:
print to_json({ "menu", \%el1, \%el2 });
之间的位{ ... }
被解释为散列,因此第一项和第三项被视为散列键,第二项被视为一个值。所以你得到你看到的输出。(并且,正如评论中指出的那样,您会在use warnings
第二个键没有关联值的情况下收到警告)。
我认为你想写的是:
print to_json({ "menu", \@menu });
但即使这样也不对。您会得到以下信息:
{
"menu":[{
"element1":"hello"
},{
"element2":"world"
}]
}
您添加到数组中的两个哈希仍然是完全分开的。
但你真正想要的是一个单一的哈希。所以改为创建它。
#!/usr/bin/perl
use strict;
use warnings;
use JSON;
use Data::Dumper;
my @menu;
my %el1 = (
"element1" => "hello",
"element2" => "world",
);
print to_json({"menu", \%el1});
推荐阅读
- flutter - 语法荧光笔不会展开以显示所有代码
- dexie - 添加主键作为参数时,Dexiedb Put 方法不起作用
- python - 如何在注册 Django 时检索用户 IP 地址、城市、国家/地区?
- python-3.x - 我如何获得这个输出?
- php - 使用 twilio 代理 api 进行通话录音
- formatting - 我可以使用 openpxl 查找工作表中的所有空白(空单元格)并将 PatternFill 应用于
- php - 路由问题:Laravel 5.8 中不存在类控制器
- angular - 使用 ' of ' 运算符创建 Observable 后订阅不可用(需要 root 和单例服务)
- sql - 如何在 SQL Server 中使用 Parse 名称分隔值
- android - 如何使用 secp256r1 类型的椭圆曲线密钥对在 Android 中加密和解密数据?