我使用perl的json模块来解析json对象并更新它。
在更新json对象后,我们看到,json中元素的顺序发生了变化,我理解json中元素的顺序无关紧要。
但是想知道有没有一种方法可以保持与输入json对象相同的顺序?因为我们与许多客户端共享更新json,我担心是否有人正在使用解析器,其中元素的顺序是硬编码的。
答案 0 :(得分:0)
您需要使用某种绑定哈希来强制执行密钥的顺序:Tie::IxHash。
以下是概念证明:
#!/usr/bin/env perl
use strict;
use warnings;
use v5.10;
use JSON::XS;
my $JSON = JSON::XS->new->utf8->indent->space_after->convert_blessed;
my $data = {
a => 1,
b => 2,
c => 3,
d => 4,
e => 5,
};
say $JSON->encode($data); # Keys are unordered
bless $data, 'MyAlphaHash';
say $JSON->encode($data); # Keys are alphabetized
package MyAlphaHash;
use Tie::IxHash;
sub TO_JSON {
my $self = shift;
tie my %hash, 'Tie::IxHash', %$self;
tied(%hash)->Reorder( sort keys %hash );
return \%hash;
}
输出:
$ perl ordered.pl
{
"e": 5,
"c": 3,
"a": 1,
"b": 2,
"d": 4
}
{
"a": 1,
"b": 2,
"c": 3,
"d": 4,
"e": 5
}