首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将JSON缓冲区转换为perl中的字符串

将JSON缓冲区转换为perl中的字符串
EN

Stack Overflow用户
提问于 2020-09-18 00:20:20
回答 2查看 159关注 0票数 1

发布:尝试使用脚本将json缓冲区数据写入文件。

场景:

我将在Postgres中获得二进制数据。

因此,为了重新创建场景,我将“极客”转换为二进制格式并存储在Postgres中。

代码语言:javascript
复制
Input :  geeks
Output : 1100111 1100101 1100101 1101011 1110011  

Nodejs从postgres查询二进制数据,并以json格式发送响应如下。

代码语言:javascript
复制
[
 {
   "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脚本,但我不知道如何将原始字符串,即“极客”写入文件。

代码语言:javascript
复制
    $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;

我不确定如何获得以“极客”为内容的文件。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-09-18 01:00:15

代码语言:javascript
复制
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,而无需付出任何代价!

票数 2
EN

Stack Overflow用户

发布于 2020-09-18 01:08:37

解决问题的算法:

representation

  • join

  • 获取数据到哈希ref

  • 使用运算符map with split将数字转换为使用chroct bin数字转换为

  • 字符串的bin

  • 数组,以满足您希望

<代码>F 213的要求

代码语言:javascript
复制
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的形式运行

代码语言:javascript
复制
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的内容

代码语言:javascript
复制
geeks
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63947712

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档