发布:尝试使用脚本将json缓冲区数据写入文件。
场景:
我将在Postgres中获得二进制数据。
因此,为了重新创建场景,我将“极客”转换为二进制格式并存储在Postgres中。
Input : geeks
Output : 1100111 1100101 1100101 1101011 1110011 Nodejs从postgres查询二进制数据,并以json格式发送响应如下。
[
{
"lo_get": {
"type": "Buffer",
"data": [
49,
49,
48,
48,
49,
49,
49,
32,
49,
49,
48,
48,
49,
48,
49,
32,
49,
49,
48,
48,
49,
48,
49,
32,
49,
49,
48,
49,
48,
49,
49,
32,
49,
49,
49,
48,
48,
49,
49
]
}
}
]下面是我编写的Perl脚本,但我不知道如何将原始字符串,即“极客”写入文件。
$req = HTTP::Request->new(GET => $url);
$res = $ua->request($req);
$response = decode_json($res->content);
if ($res->is_success & @$response) {
$string = @$response[0]->{Output}->{data};
print ($string);
}
open my $fh, ">", "data_out.json";
print $fh encode_json($string);
close $fh;我不确定如何获得以“极客”为内容的文件。
发布于 2020-09-18 01:00:15
my $binary =
pack 'C*',
@{ $response->[0]{lo_get}{data} };
say $binary; # '1100111 1100101 1100101 1101011 1110011
my $bytes =
pack 'C*',
map { oct("0b$_") }
split(' ', $binary);
say $bytes; # geeks它被转换成二进制
这毫无意义。除了不必要的额外工作,将字节转换成二进制表示或在访问数据库时返回,它还会将所需的存储量乘以9,而无需付出任何代价!
发布于 2020-09-18 01:08:37
解决问题的算法:
representation
map with split将数字转换为使用chr和oct bin数字转换为
<代码>F 213的要求
use strict;
use warnings;
use feature 'say';
use JSON;
use Data::Dumper;
my $fname = 'data.txt';
my $input = do { local $/; <DATA> };
my $data = from_json($input);
say 'Read: ' . Dumper($data);
my $str = join '', map { chr } @{$data->[0]{lo_get}{data}};
my @bin = map { '0b' . $_ } split ' ', $str;
$str = join '', map { chr oct($_) } @bin;
say 'Out: ' . $str;
open my $fh, '>', $fname
or die "Couldn't open $fname";
say $fh $str;
close $fh;
__DATA__
[
{
"lo_get": {
"type": "Buffer",
"data": [
49,
49,
48,
48,
49,
49,
49,
32,
49,
49,
48,
48,
49,
48,
49,
32,
49,
49,
48,
48,
49,
48,
49,
32,
49,
49,
48,
49,
48,
49,
49,
32,
49,
49,
49,
48,
48,
49,
49
]
}
}
]以script.pl的形式运行
Read: $VAR1 = [
{
'lo_get' => {
'type' => 'Buffer',
'data' => [
49,
49,
48,
48,
49,
49,
49,
32,
49,
49,
48,
48,
49,
48,
49,
32,
49,
49,
48,
48,
49,
48,
49,
32,
49,
49,
48,
49,
48,
49,
49,
32,
49,
49,
49,
48,
48,
49,
49
]
}
}
];
Out: geeks文件data.txt的内容
geekshttps://stackoverflow.com/questions/63947712
复制相似问题