Невозможно использовать строку как ошибку HASH ref при использовании модуля Perl JSON для декодирования - PullRequest
2 голосов
/ 30 декабря 2010

Когда я делаю:

use strict;
use JSON;
$json_ref = $json->decode($json_data);

Моя структура $ json_ref создается со строками в виде хеш-ссылок. Я просматриваю это через Data :: Dumper, то есть:

print STDERR "JSON: " . Dumper($json_ref);

Есть ли способ декодировать JSON, чтобы он не использовал строки в качестве хэш-ссылок? Или я просто не включаю ограничения при работе с данными JSON в perl?

Ответы [ 2 ]

1 голос
/ 30 декабря 2010

Кажется, у меня все в порядке, не могли бы вы опубликовать пример JSON и что вы получаете?

use strict;
# JSON example text from http://www.json.org/example.html
my $js = qq[

{
    "glossary": {
        "title": "example glossary",
        "GlossDiv": {
        "title": "S",
        "GlossList": {
                "GlossEntry": {
                    "ID": "SGML",
                    "SortAs": "SGML",
                    "GlossTerm": "Standard Generalized Markup Language",
                    "Acronym": "SGML",
                    "Abbrev": "ISO 8879:1986",
                    "GlossDef": {
                    "para": "A meta-markup language, used to create markup languages such as DocBook.",
                    "GlossSeeAlso": ["GML", "XML"]
                    },
                 "GlossSee": "markup"
                }
            }
        }
    }
}

];

use JSON;
use Data::Dumper;
my $json = new JSON();
my $json_ref = $json->decode($js);
print Data::Dumper->Dump([$json_ref]);

ВЫВОД:

$VAR1 = {
  'glossary' => {
          'GlossDiv' => {
          'GlossList' => {
                   'GlossEntry' => {
                     'GlossDef' => {
                     'para' => 'A meta-markup language, used to create markup languages such as DocBook.',
                     'GlossSeeAlso' => [
                         'GML',
                         'XML'
                       ]
                   },
                     'GlossTerm' => 'Standard Generalized Markup Language',
                     'ID' => 'SGML',
                     'SortAs' => 'SGML',
                     'Acronym' => 'SGML',
                     'Abbrev' => 'ISO 8879:1986',
                     'GlossSee' => 'markup'
                   }
                 },
          'title' => 'S'
        },
          'title' => 'example glossary'
        }
        };
0 голосов
/ 19 апреля 2018

У меня была эта проблема при выполнении POST JSON для Catalyst :: Controller :: REST, когда я не установил правильный тип содержимого 'application / json'

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...