Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

malformed JSON string, neither array, object, number, string or atom

Tags:

json

parsing

perl

I have trouble parsing a json object with perl and I don't know if the issue is coming from the json or my script. Here is the 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
      }
   ]
}

Here the script:
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)};

And finally the error I'm getting:
error

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

Q: Can someone tell me whether the issue is coming from the json or my script and what to change in either case?

FYI the json is coming from Alfresco auditing api.

like image 659
Max Avatar asked Nov 22 '11 14:11

Max


2 Answers

This:

"application":AuditExampleLogin1,

… is invalid JSON. AuditExampleLogin1 isn't an array, object, number, string or atom. I don't know what it is supposed to be, so I can't tell you what to change it to.

If it is a string, then you need to enclose it in ".

See also: JSON Lint.

like image 152
Quentin Avatar answered Oct 03 '22 00:10

Quentin


It works if the Audit... and admin values are quoted. The line

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

needs to be just

my @json = decode_json($result);
like image 38
Bill Ruppert Avatar answered Oct 03 '22 00:10

Bill Ruppert