malformed JSON string, neither array, object, number, string or atom
29,766
Solution 1
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);
Solution 2
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.
Author by
Max
Analytics consultant available for hire. More info: https://maxcorbeau.com
Updated on August 05, 2022Comments
-
Max almost 2 years
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:
errormalformed 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?
-
Max over 12 yearsindeed it works when
application
anduser
values are quoted. Is there a way to tellperl
to be a bit more loose on the parsing of JSON and accept unquoted strings? (that would save me from having to rewrite the json). -
Bill Ruppert over 12 yearsNot sure, the JSON module author considers strict checking to be a security feature. You might poke at the code, JSON::PP is a pure perl version.
-
Dave Cross over 12 yearsYou're asking a JSON parser to successfully parse data that isn't valid JSON. That way lies madness, surely :)