CGI::Application::Plugin::JSON - json_body возвращается назад

Мне было интересно, если бы кто-нибудь знал, почему это возвращение назад с CGI::Application::Plugin::JSON

sub {
    my ($self) = @_;

    my $q = $self->query;

    return $self->json_body({ result => '1', message => 'I should be AFTER result'} );

}

Выход выглядит следующим образом:

{"message":"I should be AFTER result","result":"1"}

Я бы предположил, что он будет форматировать JSON слева направо из пар ключ / значение, и помнить, что это будет назад, это нормально, но у меня есть много возвратов для обработки, и проверка на стороне клиента выполняется с помощью "результата" значение, поэтому, если я просто что-то упускаю, я бы хотел, чтобы это выводилось так же, как и ввод

РЕДАКТИРОВАТЬ:

Также я просто замечаю, что он не возвращает объект типа JSON Boolean как "result":"1" будет десериализован как объект sting, а не как логическое значение JSON. Есть ли способ получить его вывод "result":1

Спасибо за любую помощь, которую я могу получить с этим.

1 ответ

Решение

Я бы предположил, что он будет форматировать JSON слева направо из пар ключ / значение

Вы путаете список, назначенный хешу, с самим хешем. У хешей нет ни левого, ни правого; у них есть массив связанных списков.

Вы получаете порядок, в котором элементы находятся в хэше. Вы не можете контролировать этот порядок, пока используете хеш.

Если вам действительно нужно иметь поля в определенном порядке (что было бы очень странно), вы можете попробовать использовать что-то, что выглядит как хеш, но помнит порядок вставки (например, Tie:: IxHash).

помнить, что это будет задом наперед хорошо

Мало того, что они не "задом наперед", порядок даже не предсказуем.

$ perl -MJSON -E'say encode_json {a=>1,b=>2,c=>3} for 1..3'
{"b":2,"c":3,"a":1}
{"c":3,"a":1,"b":2}
{"a":1,"c":3,"b":2}

Есть ли способ получить его вывод "result":1

result => 1

Другие вопросы по тегам