2016-07-20 9 views
-1

私はjsonハッシュからキーを表示しようとしていますPerl:ハッシュからキーの注文を保存するには?

実行後、私はすべてのキーを表示しましたが、順序は異なります。私はその時点で立ち往生した。

キーの順序を保存する可能性はありますか?

お手数をおかけします。

ありがとうございました。

+1

別の配列などのように、別々に保存する必要があります。ハッシュのポイントは重要なキーの順序を持​​たないことです。 – AntonH

+0

@AntonHしたがって、jsonのハッシュの代わりに配列を使用する方法はありますか?私はその順序を保存できますか? – Kais

+0

次に、解析されたデータを格納するためにハッシュを使用せず、代わりに配列に格納します。 JSONモジュールを解析に使用して、ホイールを再開発しようとしないでください。 – dgw

答えて

-1

リストを作成し、各リスト要素に2つのフィールド(キーと値)を持つ別のリストを追加することができます。これは実質的に順序付けられたハッシュです。

#!/usr/bin/perl 

%json = qw(key1 value1 key2 value2 key3 value3); 
my $result = "keys => { \n"; 
for my $key (keys %json) { 
    $result .= "$key\n"; 
} 
$result .= " }\n\n"; 

print $result; 

my $json=[]; 
for my $key (sort keys %json) { 
    my @list =(); 
    push(@list,$key); 
    push(@list,$json{$key}); 
    push(@$json,\@list); 
} 

for (@$json) { 
    print $_->[0], " ", $_->[1], "\n"; 
} 
+0

ありがとうございます。しかし、私の場合、jsonは手動ではなくファイルから取得する必要があります。したがって、私は 'decode_json'で動作するメソッドが必要です。 – Kais

+4

独自のdecode_jsonを書きます。これはオリジナルをラップしますが、余分なビットをリストに変換します。私はあなたがしようとしていることをしてはならないと思う。 JSONを注文する必要はありません。 –

+0

私はテストのためだけに注文する必要がありました。しかし今は大丈夫です。私はその命令を無視する。ありがとう、それは役に立つ。 – Kais

1

定義上ハッシュは順序がありません。これは、PerlハッシュとJSON構造に当てはまります。 Perlでは、ハッシュ内のキーの順序は、ハッシュに追加された方法と同じではない場合があります。 2つのJSON構造は互いに同等であることができますが、同じではありません。

特定の順序でキーが必要な場合は、sortを使用して、調べる順序でキーを並べ替えることができます。

関連する問題