RU.PERL------------------ < Пред. | След. > -- < @ > -- < Сообщ. > -- < Эхи > --
 Nп/п : 19 из 19
 От   : Roman Danilov                       2:5020/570.54     22 окт 23 02:11:10
 К    : Gennadij Pastuhov                                     22 окт 23 03:01:04
 Тема : Re: Как передать в json двоичное число?
----------------------------------------------------------------------------------
                                                                                 
@MSGID: 2:5020/570.54 65345ed5
@REPLY: 2:5036/26 64d24e00
@CHRS: CP866 2
@TZUTC: 0300
@TID: hpt/w32-mgw 1.4.0-sta 30-03-12
   Привет, Gennadij!

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

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

 То, о чем говорил 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)
SEEN-BY: 469/122 4500/1 5010/275 5020/290 545 570
715 848 921 1042 4441 9696
SEEN-BY: 5020/12000 5022/2 128 5023/24 5026/49
5030/500 1081 5034/13 5057/19
SEEN-BY: 5059/37 5061/15 5066/18 5075/128
@PATH: 5020/570 715 4441



   GoldED+ VK   │                                                 │   09:55:30    
                                                                                
В этой области больше нет сообщений.

Остаться здесь
Перейти к списку сообщений
Перейти к списку эх