Привет, 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)