2016-08-08 32 views
-1

私はjsonオブジェクトを解析して更新するためにperlのjsonモジュールを使用しています。Perl Jsonパーサー、jsonの要素の順序を変更する

jsonオブジェクトを更新した後、json内の要素の順序が変更されていることがわかりました。jsonの要素の順序は問題ではないことがわかります。

しかし、知りたいと思った私は、入力されたJSONオブジェクトと同じ順序を保つことができる方法は、我々は多くのクライアントで更新JSONを共有するためいくつかのいずれかが、要素の順序は難しいですパーサを使用している場合、私は怖い?ありコード化される。

+0

あなたはJSONオブジェクトを読み、修正するために使用されているいくつかのコードを共有することができます –

答えて

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 
} 
関連する問題