所以我有一个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的新手,所以我可能会遗漏一些东西。非常感谢任何帮助。
答案 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