2011-05-25 22 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