在PERL中将带有双引号的变量传递给JSON for REST客户端

时间:2016-01-05 12:57:51

标签: json perl double-quotes

情况是我正在处理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",.....

2 个答案:

答案 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;