2016-01-05 41 views
0

情况是我正在处理REST和JSON。为REST客户端发出JSON请求。 我有一个循环的简单,对我造成IDS将带双引号的变量传递给PERL中的REST客户端的JSON

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编码,然后后提出请求

我得到这个:

"\"1\",\"2\",\"3\",\"4\",...... 

,我想:

"1","2","3","4",..... 
+1

哪种语言(编码)您使用的?并且在请求或响应时遇到问题? –

+0

使用perl,查询本身(请求) – deep

+0

然后标记它的perl。 –

回答

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 ]; 
+0

啊,太好了!感谢了这个主意! – deep

+0

所以我试过这个: 'my $ json_str = to_json([1..2504]);' 'print $ json_str;' 这就给我 '[1,2,3,4 ..... ]',而在JSON中,它所做的全部是'“[1,2,3,4 ...]”' 我想要'[“1”,“2”,“3”,“4”..... 。]' – deep

+0

应该工作一样。毕竟,他们只是json值。但如果这不起作用,[map {“$ _”} 1..2504]' – Sobrique

0

好,编码后,但作出POST请求之前,我最终会做以下和它的工作:

$postRequestJSON=~s/\\//g; 
相关问题