как мне избавиться от одинарных кавычек вокруг строки в двойных кавычках в perl? например 'json_text'

Итак, у меня есть приложение ruby, записывающее ответ json на консоль, который читается другой программой perl, которая пытается преобразовать ответ json обратно в хэш perl. Вот моя проблема:

ruby приложение выводит правильный вывод json, но консоль добавляет к нему одинарную кавычку, например:

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

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

Теперь я ожидаю получить hash_ref в $ret, но получаю строку: '{"return":{"sync_enabled":false,"local":true,"name":{"name\":"Sam"}}}'.

Я искал по всей сети и не могу найти решение этой проблемы. Когда я вручную вырезаю одинарную кавычку: "{\"return\":{\"sync_enabled\":false,\"local\":true,\"name\":{\"name\":\"Sam\"}}}" и запускаю, все работает.

Я застрял на этом больше суток, и это сводит меня с ума. Я новичок в perl и ruby, поэтому могу что-то упустить. Любая помощь будет оценена по достоинству.


person Sam    schedule 04.11.2011    source источник


Ответы (1)


Почему вы пытаетесь решить проблему на стороне Perl? Не проще ли было бы решить это на стороне Ruby? В любом случае, вы можете использовать регулярные выражения для удаления этих двойных кавычек так же, как вы делаете это вручную:

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
person jjmerelo    schedule 04.11.2011