gpt4 book ai didi

json - Hash::Ordered 与 Tie::IxHash 与 JSON::XS 编码

转载 作者:行者123 更新时间:2023-12-03 18:17:50 26 4
gpt4 key购买 nike

我正在尝试 Hash::Ordered 而不是 Tie::IxHash ,因为它似乎更快。

Tie::IxHash工作正常,我在 Hash::Ordered 上遇到了一些问题.关键是要对散列进行排序(在 Perl 中通常是随机的)。

use Hash::Ordered;
use JSON::XS;
use Data::Dumper;

use strict;
use warnings;

my $json = JSON::XS->new;

my $oh = Hash::Ordered->new;
$oh->push('result' => { 'counter' => "123" }, 'number' => { 'num' => '55' });

my @r = $oh->as_list;

$json->pretty(1);
my $jsondata = $json->encode(\@r);
print Dumper $jsondata;

结果很奇怪:
 [
"result",
{
"counter" : "123"
},
"number",
{
"num" : "55"
}
]

这是 Tie::IxHash 的工作示例,我尝试使用 Hash::Ordered 获得相同的结果.
use Data::Dumper;
use Tie::IxHash;
use JSON::XS;

use strict;
use warnings;

my $json = JSON::XS->new;

my %h;
tie(%h, 'Tie::IxHash', result => { counter => "123" }, number => { num => '55' });

$json->pretty(1);
my $pretty_json = $json->encode(\%h);

print Dumper $pretty_json;

输出
{
"result" : {
"counter" : "123"
},
"number" : {
"num" : "55"
}
}

最佳答案

Hash::Ordered 的面向对象接口(interface)比绑定(bind)接口(interface)快得多,但某些实用程序(如 $json->encode )需要真正的哈希引用

两全其美的方法是将哈希与这些实用程序一起使用,并使用 tied提取底层Hash::Ordered对象,以便您可以使用更快的方法调用来操作它

这个简短的程序演示。这段代码唯一慢的部分是当哈希被传递到 encode 时。被翻译成 JSON。 push call 不使用绑定(bind)接口(interface)并保持快速

use strict;
use warnings;

use Hash::Ordered;
use JSON::XS;

my $json = JSON::XS->new->pretty;

tie my %h, 'Hash::Ordered';
my $oh = tied %h;
$oh->push( result => { counter => 123 }, number => { num => 55 } );

print $json->encode(\%h), "\n";

输出
{
"result" : {
"counter" : 123
},
"number" : {
"num" : 55
}
}

关于json - Hash::Ordered 与 Tie::IxHash 与 JSON::XS 编码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38028559/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com