Я пытаюсь прочитать ассоциативный массив Perl в моем сценарии PHP. Для этого сначала я пытаюсь преобразовать Perl-хэш в JSON с помощью модуля JSON.
Ниже приведен скрипт на Perl, который я использую для преобразования ассоциативного массива в JSON. Файл toc.pl имеет ассоциативный массив «asc_array».
use JSON;
$j = new JSON;
require'toc.pl';
print encode_json \%asc_array;
Asc_array выглядит как
%asc_array = (
"1" => 'Introduction',
"1.1" => 'Scope',
"1.2" => 'Purpose',
"2" => 'Terminology',
"2.1" => 'Definitions',
"2.2" => 'Service Primitives',
"2.3" => 'Abbreviations',
"2.4" => 'Acronyms',
);
Здесь я сталкиваюсь с проблемой, которая заключается в том, что после преобразования ее в JSON меняется порядок элементов ассоциативного массива.
Поэтому мой вопрос: как я могу сохранить порядок элементов даже после преобразования его в JSON?
И после преобразования в JSON я читаю сценарий JSON in PHP.
Есть ли лучший способ прочитать ассоциативный массив Perl в сценарии PHP?
использование JSON->canonical
сортировать ключи
use JSON;
my %asc_array = (
"1" => 'Introduction',
"1.1" => 'Scope',
"1.2" => 'Purpose',
"2" => 'Terminology',
"2.1" => 'Definitions',
"2.2" => 'Service Primitives',
"2.3" => 'Abbreviations',
"2.4" => 'Acronyms',
);
print JSON->new->canonical(1)->encode( \%asc_array ), "\n";
Выход:
{"1":"Introduction","1.1":"Scope","1.2":"Purpose","2":"Terminology","2.1":"Definitions","2.2":"Service Primitives","2.3":"Abbreviations","2.4":"Acronyms"}
Поскольку ваши хеш-ключи легко сортируются, почему бы просто не отсортировать данные после их получения скриптом PHP?
то есть
use JSON::PP;
my %asc_array = (
"1" => 'Introduction',
"1.1" => 'Scope',
"1.2" => 'Purpose',
"2" => 'Terminology',
"2.1" => 'Definitions',
"2.2" => 'Service Primitives',
"2.3" => 'Abbreviations',
"2.4" => 'Acronyms',
);
my $json = JSON::PP->new;
print $json->encode(\%asc_array);
Затем в вашем PHP-скрипте:
# replace this with whatever method you're using to get your JSON
# I've jumbled up the order to demonstrate the power of sorting.
$json = '{"2.3":"Abbreviations", "2.1":"Definitions", "1":"Introduction", "2.4":"Acronyms", "1.1":"Scope", "2":"Terminology", "2.2":"Service Primitives", "1.2":"Purpose"}';
$decoded = json_decode( $json, true );
ksort($decoded);
print_r($decoded);
Выход:
Array
(
[1] => Introduction
[1.1] => Scope
[1.2] => Purpose
[2] => Terminology
[2.1] => Definitions
[2.2] => Service Primitives
[2.3] => Abbreviations
[2.4] => Acronyms
)