Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/34.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 在perl中将JSON缓冲区转换为字符串_Node.js_Json_Perl - Fatal编程技术网

Node.js 在perl中将JSON缓冲区转换为字符串

Node.js 在perl中将JSON缓冲区转换为字符串,node.js,json,perl,Node.js,Json,Perl,问题:尝试使用Perl脚本将json缓冲区数据写入文件 场景: 我将在Postgres中使用二进制数据 Input : geeks Output : 1100111 1100101 1100101 1101011 1110011 因此,为了重新创建场景,我将“极客”转换为二进制格式并存储在Postgres中 Input : geeks Output : 1100111 1100101 1100101 1101011 1110011 Nodejs从postgres查询二进制数据,并

问题:尝试使用Perl脚本将json缓冲区数据写入文件

场景:

我将在Postgres中使用二进制数据

Input :  geeks
Output : 1100111 1100101 1100101 1101011 1110011  
因此,为了重新创建场景,我将“极客”转换为二进制格式并存储在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脚本,但我不确定如何将原始字符串(即“geeks”)写入文件

    $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;
我不知道如何才能获得以“极客”为内容的文件。

my$binary=
包装“C*”,
@{$response->[0]{lou get}{data};
说$binary;#'1100111 1100101 1100101 1101011 1110011
我的$bytes=
包装“C*”,
地图{oct(“0b$)}
拆分(“”,$binary);
比如说$bytes;#极客

它被转换成二进制


这毫无意义。除了在访问数据库时将字节转换为二进制表示形式或转换回二进制表示形式的不必要的额外工作之外,它还可以将所需的存储空间增加9倍,而不必付出任何代价

解决问题的算法:

  • 将数据获取到hash ref中
  • 使用运算符
    map
    split
    将数字转换为bin表示
  • 将使用
    chr
    oct
    bin编号转换的数据数组连接到一个字符串中
  • 根据需要处理字符串
文件内容
data.txt

geeks

非常感谢。我将有二进制格式的Postgres数据。我创建了上面的示例以适应我的场景,但您没有将其存储为“二进制格式”(这意味着一种高效但可能不是人类可读的格式);您将获取“二进制数据”(即任意字节)并存储其文本(即人类可读的)表示形式。这与你声称的相反!这是正确的。它的二进制数据。在这种情况下,我需要考虑其他的东西吗?同样,它不是二进制数据;这是文本数据。您应该存储二进制数据,而不是它的文本表示。你把二进制(一个数字的文本表示)和二进制数据(一个非常松散的术语,意思是“不可读,因为它使用所有字节值”)混淆了。只需删除字符串到二进制表示的转换。在Perl方面,只需使用
my$bytes=pack'C*,@{$response->[0]{lou get}{data}
@ikegami--wel OP对他的问题做了几次更改,最初他有文本,然后他更改了数组以包含二进制数据的ASCII表示,我不得不更改代码以采用此更改。好吧,我无法预测二进制数据的内容,为了安全起见,我假设它可能是用UTF-8编码的——好吧,在输出时删除
:编码(utf8)
。一组8
1
0
字符,一旦解码,字符就在0到255之间。使用UTF-8编码的可能性很小。
geeks