• Re: Как передать в json двоичное число?

    From Roman Danilov@2:5020/570.54 to Gennadij Pastuhov on Sun Oct 22 02:11:10 2023
    Привет, Gennadij!

    Ответ на сообщение Gennadij Pastuhov (2:5036/26) к All, написанное 08 авг 23 в 17:07:

    , т.е., незначащие нули усеклись. А как их сохранить?

    То, о чем говорил 11 августа: написать свою реализацию энкода json совсем нетрудно.
    Цитирую упражнение с ресурса STEPIK с решением:

    STEPIK.ORG, Введение в Perl

    6.3 Сериализация данных

    Ваша задача реализовать простой сериализатор JSON. т.е. функцию serialize($ref), которая будет возвращать JSON-строку. Вам в помощь реализована функция is_number($sv), которая возвращает истину если в скаляре содержится число.

    Пример :

    $VAR1 = {
    'b' => [
    1,
    '2',
    3
    ],
    'a' => 1,
    'c' => {
    'b' => 2,
    'a' => 1
    }
    };



    serialize($VAR1) == '{"b":[1,"2",3],"a":1,"c":{"b":2,"a":1}}'

    апишите программу. Тестируется через stdin -> stdout

    Мой зачтённый вариант решения был таков (видно, что надо применить немного рекурсии, и всё получится):

    sub serialize {
    my ($value) = @_;
    if (ref($value) eq 'ARRAY')
    {
    my @i_arr = @{$value};
    my @d;
    for (@i_arr)
    {
    push (@d, serialize($_));
    }
    return '['.join(',',@d).']';
    }
    elsif (ref($value) eq 'HASH')
    {
    my %i_slov = %{$value};
    my @c;
    for (keys %i_slov)
    {
    push (@c, '"'.$_.'":'.serialize(${$value}{$_}));
    }
    return '{'.join(',',@c).'}';
    }
    else
    {
    my $i_value=$value;
    if (is_number($i_value))
    {
    return $i_value;
    }
    else
    {
    return '"'.$i_value.'"';
    }
    }
    }

    К сожаленью, протестировать ее в своей среде не могу, т.к. не представляю как сделать свою корректную реализацию функции is_number(). Если обвязку, работающую с незначащими нулями, создать удастся, то засунуть эти изменения в приведенный выше код, как видно, не должно составить большого труда.


    С уважением - Roman
    --- GoldED+/W32-MINGW 1.1.5-b20120519 (Kubik 3.0)
    * Origin: Делай всё сам, не грузи ближнего. R2AMO. (2:5020/570.54)