Как мне избавиться от одинарных кавычек вокруг строки с двойными кавычками в Perl?например, "" json_text "' - PullRequest
0 голосов
/ 04 ноября 2011

Итак, у меня есть приложение 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, поэтому я могу что-то упустить. Любая помощь будет принята с благодарностью.

1 Ответ

0 голосов
/ 04 ноября 2011

Почему вы пытаетесь решить проблему на стороне 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
...