Добавление массива в структуру JSON в Perl - PullRequest
0 голосов
/ 04 декабря 2018

У меня есть хеш, который выглядит следующим образом (в Perl):

'multi' => {
           'key2' => '123',
           'key1' => 'abc',
           'key3' => 'xwz'
         }

Также у меня есть следующая структура:

my $json_struct = {
    name => $name,
    time => $time,
};

Я хотел бы вставить multi в$json_struct как массив с ключами и значениями.Я использую $json_struct, чтобы преобразовать его в файл JSON, поэтому вывод JSON должен выглядеть следующим образом:

{
    "name" : "some_name",
    "time" : "time",
    "multi" : [ 
    {
        "key" : "key1",
        "value" : "abc"
    }, 
    {
        "key" : "key2",
        "value" : "123"
    },
    {
        "key" : "key3",
        "value" : "xwz"
    }
],
}

Как я могу это сделать?Какой самый чистый способ возможен (без импорта дополнительных модулей).

Ответы [ 2 ]

0 голосов
/ 04 декабря 2018
#!/usr/bin/env perl
use v5.10.1;
use warnings FATAL => "all";
use autodie;
use Data::Dumper;

my $payload = {
    'multi' => {
        'key2' => '123',
        'key1' => 'abc',
        'key3' => 'xwz'
    }
};

my $json_struct = {
    name => "foo",
    time => "2018-12-03",
};

for my $key (keys %$payload) {
    my @as_array = map { 
        { 
            key => $_, 
            value => $payload->{$key}{$_} 
        } 
    } keys %{$payload->{$key}};
    $json_struct->{$key} = \@as_array;
}

say Dumper $json_struct;

# $VAR1 = {
#     'name' => 'foo',
#     'time' => '2018-12-03',
#     'multi' => [
#         {
#             'value' => 'abc',
#             'key' => 'key1'
#         },
#         {
#             'value' => '123',
#             'key' => 'key2'
#         },
#         {
#             'key' => 'key3',
#             'value' => 'xwz'
#         }
#     ]
# };
0 голосов
/ 04 декабря 2018

Чтобы добавить массив, вы просто добавляете ссылку на массив в структуру данных:

$json_struct->{multi} = \@multi;

В случае, если %multi является хешем, вы можете использовать:

my @multi = map { +{ key => $_, value => $multi{ $_ } } } sort keys %multi;
$json_struct->{multi} = \@multi;

См. Также

https://perldoc.perl.org/perlreftut.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...