perl - 如何将数据添加到哈希引用
问题描述
我在将数据附加到哈希数组时遇到问题。它不是将数据附加到哈希中,而是创建一个新的哈希。
$json_data =
{
'site_data' =>
{
'urldata' =>
[
{
'URL' => "$filedata{'filename'}"
}
],
}
}
my %format =('Format'=>'ZIP');
push ($json_data->{'site_data'}->{'urldata'},\%format);
我期待的是。
'urldata':
[
{
'URL':"www.espn.com",
'Format':"ZIP"
}
],
我得到的是。
'urldata':
[
{
'URL':"www.espn.com"
},
{
'Format':"ZIP"
}
],
解决方案
这里发生了一些事情。
首先,这种语法会导致问题:
push ($json_data->{'site_data'}->{'urldata'},\%format);
这使用了在 Perl 5.14 中添加并在 5.24 中再次删除的实验性功能。所以请不要使用它。您需要明确地尊重您的数组引用(通过@{ ... }
在表达式周围放置。
push (@{ $json_data->{'site_data'}->{'urldata'} }, \%format);
但这不会让你更接近。这只是让你在任何版本的 Perl 上都能得到同样的、破碎的解决方案:-)
该push()
函数仅适用于数组。在您的情况下,您在存储在urldata
哈希键中的数组(引用)上使用它。但是您不想push()
在该数组上添加一个新元素(因为这会给您当前看到的错误结果)。您想要访问存储在数组中的现有第一个哈希并向其中添加键/值对。
数组的第一个元素由urldata
下式给出:
$json_data->{'site_data'}->{'urldata'}->[0]; # The '0' gives the first element.
这是一个哈希引用,因此您可以像添加任何其他哈希引用一样向哈希添加值。
$json_data->{'site_data'}->{'urldata'}->[0]->{'Format'} = 'ZIP';
当然,您可以通过删除散列键周围的引号来整理这段代码:
$json_data->{site_data}->{urldata}->[0]->{Format} = 'ZIP';
索引括号之间的箭头始终是可选的:
$json_data->{site_data}{urldata}[0]{Format} = 'ZIP';
推荐阅读
- json - JSON - WepAPI - 解析值时遇到意外字符
- r - Sparklyr:尝试使用外部变量作为索引访问存储在列中的向量的元素
- bootstrap-4 - Bootstrap 视频轮播不会自动付款
- java - 如何在 AndroidStudio 项目中添加和使用 AAR
- c# - 时间:2019-04-10 标签:c#musicbot pipe broken
- c# - 在 Z3 C# API 中定义通用数据类型
- rust - 如何根据泛型类型是否实现特征以不同方式实现函数?
- qt - 为什么在 QML 中查找窗口大小的代码不起作用?
- php - DOMDocument 和 UTF8。MySQL说:不正确的字符串值
- spring-ws - 使用 2 个不同的 AnnotationActionEndpointMapping