2011-05-25 27 views
3

我有這個JSON字符串如何將此字符串編碼爲JSON?

$json_string = qq{{"error" : "User $user doesn't exist."}}; 

這是我在一個較低水平的方式構建,可以這麼說。

如何使用JSON模塊對其進行編碼?

現在我編碼這樣

use JSON; 
my $json_string; 

my $json = JSON->new; 
$json = $json->utf8; 

my $data; 
$data->{users} = $json->encode(\%user_result); 
$data->{owners} = $json->encode(\%owner_result); 
$json_string = to_json($data); 

print $cgi->header(-type => "application/json", -charset => "utf-8"); 
print $json_string; 
+2

你爲什麼雙編碼的JSON? – cjm 2011-05-25 10:18:32

回答

6

拉特納是正確的 - 你不能編碼一個簡單的字符串(除非你把它放在一個列表或散列)

這裏有一些變種的編碼您的字符串:

use strict; 
use warnings; 
use JSON; 

my $user = "Johnny"; 

my $json_string = { error_message => qq{{"error" : "User $user doesn't exist."}} } ; 
$json_string = to_json($json_string); 
print "$json_string\n"; 

#i think below is what you are looking for 
$json_string = { error => qq{"User $user doesn't exist."} }; 
$json_string = to_json($json_string); 
print $json_string; 
1

JSON哈希值應爲{key:value}[element]

給定的錯誤字符串:

qq{{"error" : "User $user doesn't exist."}} 

是無效的,因爲據我所知。

+0

是不是關鍵:現在的價值?它仍然有效。 – 2011-05-25 08:51:24

+0

但是,如果字符串不符合JSON格式,則將字符串解碼回對象可能會成爲問題。 – 2011-05-25 09:00:25

0

我不不知道在響應之後是否添加了功能,但是您可以使用JSON模塊使用perl編碼json字符串。

使用allow_nonref:

$json = $json->allow_nonref([$enable]) 

$enabled = $json->get_allow_nonref 

如果$啓用爲真(或丟失),則編碼方法可以在 非基準轉換成其相應的字符串,數字或空JSON 值,這是RFC4627的擴展。同樣,解碼將接受這些JSON值而不是呱呱叫。

代碼和報價從https://metacpan.org/pod/release/MAKAMAKA/JSON-2.90/lib/JSON.pm#allow_nonref