искаженная строка JSON, ни массив, ни объект, ни число, ни строка, ни атом - PullRequest
7 голосов
/ 22 ноября 2011

У меня проблемы с синтаксическим анализом объекта json с помощью perl, и я не знаю, исходит ли проблема от json или моего скрипта. Вот JSON:

test.json

{
   "count":3,
   "entries": 
   [
      {
         "id":85,
         "application":AuditExampleLogin1,
         "user":admin,
         "time":"2011-11-22T10:29:37.422Z",
         "values":
null
      },
      {
         "id":87,
         "application":AuditExampleLogin1,
         "user":admin,
         "time":"2011-11-22T10:30:56.235Z",
         "values":
null
      },
      {
         "id":89,
         "application":AuditExampleLogin1,
         "user":admin,
         "time":"2011-11-22T10:33:15.000Z",
         "values":
null
      }
   ]
}

Вот скрипт:
script.pl

#!/usr/bin/perl -w
use strict;
use JSON;
open FILE, 'test.json' or die "Could not open file inputfile: $!";
sysread(FILE, my $result, -s FILE);
close FILE or die "Could not close file: $!"; 
my @json = @{decode_json($result)};

И, наконец, ошибка, которую я получаю:
ошибка

malformed JSON string, neither array, object, number, string or atom,
at character offset 86 (before "AuditExampleLogin1,\n...") at     
./script.pl line 7.

В: Может кто-нибудь сказать мне, происходит ли проблема с json или моим скриптом и что нужно изменить в любом случае?

К вашему сведению, JSON исходит от Alfresco, проверяющего API .

Ответы [ 2 ]

10 голосов
/ 22 ноября 2011

Это:

"application":AuditExampleLogin1,

… неверный JSON. AuditExampleLogin1 не является массивом, объектом, числом, строкой или атомом. Я не знаю, что это должно быть, поэтому я не могу сказать вам, на что это можно изменить.

Если это строка, вам нужно заключить ее в ".

См. Также: JSON Lint .

2 голосов
/ 22 ноября 2011

Работает, если указаны значения Audit ... и admin.Линия

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

должна быть просто

my @json = decode_json($result);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...