Проблема с синтаксическим анализом JSON с помощью Perl

#perl #json #parsing

#perl #json #Синтаксический анализ

Вопрос:

У меня есть файл JSON, и я пытаюсь разобрать его на Perl. Пока у меня есть:

 use strict;
use warnings;
use JSON;

open my $fh, "/Users/arjunnayini/Desktop/map_data.json";   


my @decoded_json = @{decode_json($fh)};
  

Но я получаю сообщение об ошибке, которое у меня есть:
«искаженная строка JSON, не являющаяся ни массивом, ни объектом, ни числом, ни строкой, ни атомом, со смещением символа 0 (перед «GLOB (0x100804ed0)») «

Я совершенно уверен, что файл JSON отформатирован правильно, поэтому я не уверен, где это происходит неправильно. Есть предложения?

Ответ №1:

Предполагая, что ваш вызов JSON правильный, вам нужно сначала загрузить файл:

 #!/usr/bin/perl

use strict;
use warnings;
use JSON;

my $json;
{
  local $/; #enable slurp
  open my $fh, "<", "/Users/arjunnayini/Desktop/map_data.json";
  $json = <$fh>;
} 

my @decoded_json = @{decode_json($json)};
  

Комментарии:

1. или: local @ARGV = «/Users/arjunnayini/Desktop/map_data.json»; $json = <>;

2. Да, есть другие способы сначала просмотреть файл. Мой пример показывает распространенную идиому.