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

Pass variable with double quotes to JSON for REST client in PERL

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

好吧,在编码之后但在发出 POST 请求之前,我最终执行了以下操作并且成功了:

$postRequestJSON=~s/\//g;

如果您正在做 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 ];