【问题标题】:JSON sort by specific value - PERLJSON 按特定值排序 - PERL
【发布时间】:2019-05-20 13:48:19
【问题描述】:

我有这个示例代码

#!/usr/bin/perl
use strict;
use warnings;
use JSON::PP qw( );
use Data::Dumper qw (Dumper);


my $json = JSON::PP->new()->pretty->utf8;       # lesbares JSON | Sort numerically
my %ORDER = (id => 1, name => 2);

 $json->sort_by(sub {
    ($ORDER{$JSON::PP::a} // 999) <=> ($ORDER{$JSON::PP::b} // 999)
    or $JSON::PP::a cmp $JSON::PP::b
});

print $json->encode(
[
    {name => 'ABS700', id => 0, data => [
            {
                dmsg => 's4F038300', state => 'T: 3.3', user => 'SD_Protocol'
            }
        ]
    },
    {name => 'GT-WT-02', id => 0, data => [
      {
                dmsg => 's5410AC5F9800', state => 'T: 17.2 H: 47', user => 'Ralf9'
      }
    ]
    },
    {name => 'NEU', id => 99, data => [
      {
                dmsg => 's5410AC5F9800', state => 'T: 17.2 H: 47', user => 'NEUER'
      }
    ]
    },
    {name => 'Ventus W132', id => 4, data => [
      {
                dmsg => 'sD66EE1603000', user1 => 'dirigent', comment => 'wind',
                readings => [{ state => 'windGuest: 1.2 winddir:0' }]
      }
    ]
    },
],
);

我想对此进行排序,“id => 99”的值出现在末尾。

我可以任意排序所有内部值,但我需要新的外部排序。

我该如何解决这个问题?

【问题讨论】:

  • 您的问题到底是什么?你试过什么?

标签: json perl sorting


【解决方案1】:

-&gt;sort_by 用于控制哈希元素的顺序。

您想控制数组元素的顺序。

对于数组,没有与-&gt;sort_by 等效的机制,因为不需要。虽然您无法自然地控制哈希返回其元素的顺序,但您可以自然地控制数组返回其元素的顺序。

my $data = [ ... ];
@$data = sort { $a->{id} <=> $b->{id} } @$data;
print $json->encode($data);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-09-21
    • 1970-01-01
    • 1970-01-01
    • 2016-03-12
    • 1970-01-01
    • 2012-01-09
    • 2014-06-17
    • 1970-01-01
    相关资源
    最近更新 更多