如何摆脱perl中双引号字符串周围的单引号?例如'“json_text”'

时间:2011-11-04 07:16:02

标签: perl trim

所以我有一个ruby应用程序将json响应写入控制台,该控制台由另一个尝试将json响应转换回perl哈希的perl程序读取。这是我的问题:

ruby​​ app会输出正确的json输出,但控制台会像这样添加一个引号:

my $ruby_json_out = '"{\"return\":{\"sync_enabled\":false,\"local\":true,\"name\":{\"name\":\"Sam\"}}}"'

my $ret = JSON->new->allow_nonref->decode($ruby_json_out);

现在我希望在$ ret中得到hash_ref,但我得到一个字符串:'{"return":{"sync_enabled":false,"local":true,"name":{"name\":"Sam"}}}'

我在网上搜索过,无法找到解决方法。当我手动删除单引号时: "{\"return\":{\"sync_enabled\":false,\"local\":true,\"name\":{\"name\":\"Sam\"}}}", 并运行它。

我现在被困在这一天超过一天了,这让我发疯了。我是perl和ruby的新手,所以我可能会遗漏一些东西。非常感谢任何帮助。

1 个答案:

答案 0 :(得分:0)

为什么要尝试在Perl端解决问题?在Ruby方面解决它并不容易吗? 无论如何,您可以使用regexp来删除那些doble引号,方法与手动执行相同:

my ($good_json) = ($ruby_json_out =~ /^"(.+?)"$/ ;

然后

$good_json=~ s/\\"/"/g;

结果是

x JSON->new->allow_nonref->decode($good_json) 
0  HASH(0xe4b158)
'return' => HASH(0xe4b1b8)
  'local' => JSON::XS::Boolean=SCALAR(0xd22f00)
     -> 1
  'name' => HASH(0xe4afd8)
     'name' => 'Sam'
  'sync_enabled' => JSON::XS::Boolean=SCALAR(0xd22fd8)
     -> 0