情况是我正在处理REST和JSON。为REST客户端发出JSON请求。 我有一个简单的for循环为我创建id
for (my $i=1;$i<=2504;$i++)
{
push (@elements,$i);
}
my $ids = join ',',map{"\"$_\""}@elements;
但是,当我将其传递给JSON时,我看到正在打印反斜杠
$hashref=({"varreq"=>{"search"=>{"Ids"=>[$ids],"genome"=>[{"hugo"=>["$hugo"]}]},"output_format">{"groupby"=>"gene"}}});
上面用JSON编码,然后发出一个post请求
我得到了这个:
"\"1\",\"2\",\"3\",\"4\",......
我希望:
"1","2","3","4",.....
答案 0 :(得分:1)
如果你正在做JSON,为什么不呢:
use JSON;
而不是用正则表达式来攻击它:
#!/usr/bin/env perl
use strict;
use warnings;
use JSON;
my $json_str = to_json ( [1..2504] );
print $json_str;
使用to_json
,您可以将任何perl数据结构编码为JSON
结构。 (并from_json
再次将其转回)。
您可以使用encode_json
/ decode_json
执行OO风格。
你似乎已经这样做了,但是......这里:
{"Ids"=>[$ids],
可以简单地改变如上:
{ "Ids" => [@elements]
哪个应该做你想要的。
从评论中 - 我不认为任何接收JSON的东西应该被一组数字与一组数字字符串混淆。
但如果他们这样做:
my $json_str = to_json [ map {"$_"} 1..2504 ];
答案 1 :(得分:0)
好吧,在编码之后但在发出POST请求之前我最终做了以下操作并且它有效:
$postRequestJSON=~s/\\//g;