Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

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

1 view
Skip to first unread message

Gennadij Pastuhov

unread,
Aug 9, 2023, 9:21:13 PM8/9/23
to
Рад всех приветствовать! А особенно - All!

Если написать что-то вроде

my $f = 4.0;
my $j = JSON::encode_json({
object => {
value => $f,
}
});
print "j: ", $j;

, то получим:

j: {"object":{"value":4}}

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

... Jonny wanna live

Roman Danilov

unread,
Aug 10, 2023, 6:15:02 PM8/10/23
to
Привет, Gennadij!

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

GP> , т.е., незначащие нули усеклись. А как их сохранить?
я бы посмотрел в сторону или написать свою реализацию JSON (есть на STEPIK
вроде в уроках задание, и навскидку помню, что это несложно) либо натравить на
результат энкодинга регулярку, добавляющую точку-разделитель, где ее нет, и
нули после неё, в нужном количестве.

С уважением - Roman

Stas Mishchenkov

unread,
Aug 14, 2023, 3:40:01 PM8/14/23
to
Hi Gennadij!

08 Aug 23 17:07, Gennadij Pastuhov -> All:

GP> Если написать что-то вроде

GP> my $f = 4.0;
GP> my $j = JSON::encode_json({
GP> object => {
GP> value => $f,
GP> }
GP> });
GP> print "j: ", $j;

GP> , то получим:

GP> j: {"object":{"value":4}}

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

my $f = '4.0'; Пробовал?

Have nice nights.
Stas Mishchenkov.

Gennadij Pastuhov

unread,
Aug 17, 2023, 6:00:03 AM8/17/23
to
Рад всех приветствовать! А особенно - Stas!

Понедельник августа 14 23 22:33 Stas Mishchenkov писал к Gennadij Pastuhov:

GP>> my $f = 4.0;
GP>> my $j = JSON::encode_json({
GP> object =>> {
GP> value =>> $f,
GP>> }
GP>> });
GP>> print "j: ", $j;
GP>> , то получим:
GP>> j: {"object":{"value":4}}
GP>> , т.е., незначащие нули усеклись. А как их сохранить?
SM> my $f = '4.0'; Пробовал?

Конечно:
my $f = '4.0';
my $j = JSON::encode_json({
object => {
value => $f,
}
});
print "j: ", $j;

j: {"object":{"value":"4.0"}}

... Jonny wanna live

Stas Mishchenkov

unread,
Aug 19, 2023, 7:40:01 AM8/19/23
to
Hi Gennadij!

17 Aug 23 12:52, Gennadij Pastuhov -> Stas Mishchenkov:

GP>>> my $f = 4.0;
GP>>> my $j = JSON::encode_json({
GP>> object =>> {
GP>> value =>> $f,
GP>>> }
GP>>> });
GP>>> print "j: ", $j;
GP>>> , то получим:
GP>>> j: {"object":{"value":4}}
GP>>> , т.е., незначащие нули усеклись. А как их сохранить?
SM>> my $f = '4.0'; Пробовал?

GP> Конечно:
GP> my $f = '4.0';
GP> my $j = JSON::encode_json({
GP> object => {
GP> value => $f,
GP> }
GP> });
GP> print "j: ", $j;

GP> j: {"object":{"value":"4.0"}}

Цель достигнута?

Gennadij Pastuhov

unread,
Aug 22, 2023, 4:45:02 AM8/22/23
to
Рад всех приветствовать! А особенно - Stas!

Суббота августа 19 23 14:34 Stas Mishchenkov писал к Gennadij Pastuhov:

GP>> j: {"object":{"value":"4.0"}}
SM> Цель достигнута?

Пока нет.

... Jonny wanna live

Stas Mishchenkov

unread,
Aug 22, 2023, 6:50:02 AM8/22/23
to
Hi Gennadij!

22 Aug 23 11:38, Gennadij Pastuhov -> Stas Mishchenkov:

GP>>> j: {"object":{"value":"4.0"}}
SM>> Цель достигнута?

GP> Пока нет.

А вчём тогда цель?

Gennadij Pastuhov

unread,
Aug 22, 2023, 9:20:01 AM8/22/23
to
Рад всех приветствовать! А особенно - Stas!

Вторник августа 22 23 13:42 Stas Mishchenkov писал к Gennadij Pastuhov:

GP>>>> j: {"object":{"value":"4.0"}}
SM>>> Цель достигнута?
GP>> Пока нет.
SM> А вчём тогда цель?

Поместить в json число с десятичной точкой.

... Jonny wanna live

Stas Mishchenkov

unread,
Aug 23, 2023, 3:05:02 AM8/23/23
to
Hi Gennadij!

22 Aug 23 16:14, Gennadij Pastuhov -> Stas Mishchenkov:

GP>>>>> j: {"object":{"value":"4.0"}}
SM>>>> Цель достигнута?
GP>>> Пока нет.
SM>> А вчём тогда цель?

GP> Поместить в json число с десятичной точкой.

Ну, дык, а не поместили разве?

Gennadij Pastuhov

unread,
Aug 23, 2023, 3:20:02 AM8/23/23
to
Рад всех приветствовать! А особенно - Stas!

Среда августа 23 23 09:58 Stas Mishchenkov писал к Gennadij Pastuhov:

GP>>>>>> j: {"object":{"value":"4.0"}}
SM>>>>> Цель достигнута?
GP>>>> Пока нет.
SM>>> А вчём тогда цель?
GP>> Поместить в json число с десятичной точкой.
SM> Ну, дык, а не поместили разве?

Нет, в кавычках - строка. Вообще, задача в том, чтобы ходить в апи жиры, а она
очень щепетильно к типам относится.

... Jonny wanna live

Alexey Korotkov

unread,
Aug 23, 2023, 7:40:02 PM8/23/23
to
Привет Gennadij!

08-Авг-2023 17:07, Gennadij Pastuhov -> All:

GP> Если написать что-то вроде

GP> my $f = 4.0;
GP> my $j = JSON::encode_json({

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

А json здесь причем?
=== Грызем Windows Clipboard отсюда ===
my $f = 4.0;
print $f;
=== Хватит. Догрызли Windows Clipboard ===
Да, тут, похоже, проблема из-за автоматического преобразования.
КМК, как уже было сказано, собственная реализация/парсер + если в одном месте
нужно число с точкой, в другом - без, а в третьем - вообще строка, то нужно
будет побольше костылей.


Alexey

Roman Danilov

unread,
Oct 21, 2023, 8:05:02 PM10/21/23
to
Привет, 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
0 new messages