2016-01-05 43 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; 
相關問題