NAME

JSON::Repair - reformat JSON to strict compliance

SYNOPSIS

use JSON::Repair 'repair_json';

VERSION

This documents version 0.01 of JSON::Repair corresponding to git commit 726c91d0b3cc22bccd9188f0e86ee74c7ed02ff1 released on Sun Nov 20 11:48:32 2016 +0900.

DESCRIPTION

The module has some heuristics with which it tries to guess what kind of "relaxed" JSON might have been used and then convert those into strictly compliant JSON.

FUNCTIONS

repair_json

my $repaired = repair_json ($json, %options);

This alters its input in various ways to make it compliant with the JSON specification, or prints an error message if $json cannot be repaired, and returns the undefined value.

Valid options are

verbose

Print messages about the operations applied

REPAIRS APPLIED

Strip trailing commas
use JSON::Repair ':all';
print repair_json (q/{"answer":["bob dylan",42,],}/), "\n";

produces output

{"answer":["bob dylan",42]}

(This example is included as trailing-commas.pl in the distribution.)

Change single quotes to double quotes in keys
use JSON::Repair ':all';
print repair_json ("{'answer':42}"), "\n";

produces output

{"answer":42}

(This example is included as single-quotes.pl in the distribution.)

Add missing object-end, string-end and array-end markers
use JSON::Repair ':all';
my $r = repair_json ('{"stuff":["good');
print "$r\n";

produces output

{"stuff":["good"]}

(This example is included as missing-ends.pl in the distribution.)

Add quotes to unquoted keys
use JSON::Repair ':all';
print repair_json ("{how many roads must a man walk down:42}",
                   verbose => undef), "\n";

produces output

{"how many roads must a man walk down":42}

(This example is included as unquoted-keys.pl in the distribution.)

Add missing commas to objects and arrays
use JSON::Repair ':all';
print repair_json (q![1 2 3 4 {"six":7 "eight":9}]!), "\n";

produces output

[1, 2, 3, 4, {"six":7, "eight":9}]

(This example is included as missing-commas.pl in the distribution.)

Remove comments

This example uses the example from the synopsis of JSON::Relaxed:

use JSON::Repair ':all';
my $rjson = <<'(RAW)';
/* Javascript-like comments are allowed */
{
  // single or double quotes allowed
  a : 'Larry',
  b : "Curly",
   
  // nested structures allowed like in JSON
  c: [
     {a:1, b:2},
  ],
   
  // like Perl, trailing commas are allowed
  d: "more stuff",
}
(RAW)
print repair_json ($rjson, verbose => undef);

produces output

{
    "a ": "Larry",
  "b ": "Curly",
   
    "c": [
     {"a":1, "b":2}
  ],
   
    "d": "more stuff"
}

(This example is included as comments.pl in the distribution.)

Planned repairs

Sort out broken numbers

EXPORTS

"repair_json" is exported on demand. The tag ":all" exports all functions.

use JSON::Repair ':all';

DEPENDENCIES

JSON::Parse

This module relies on "diagnostics_hash" in JSON::Parse to find the errors in the input. Most of the work of the module is done by JSON::Parse's diagnostics, and then this applies a few heuristic rules to guess what might have caused the error.

C::Tokenize

This module uses the regular expression for C comments from C::Tokenize.

Perl 5.14

Unfortunately "diagnostics_hash" in JSON::Parse is only available for Perl 5.14 or later.

SEE ALSO

"SEE ALSO" in JSON::Parse for a list of JSON modules.

AUTHOR

Ben Bullock, <bkb@cpan.org>

Request

If you'd like to see this module continued, let me know that you're using it. For example, send an email, write a bug report, star the project's github repository, add a patch, add a ++ on Metacpan.org, or write a rating at CPAN ratings. It really does make a difference. Thanks.

COPYRIGHT & LICENCE

This package and associated files are copyright (C) 2016 Ben Bullock.

You can use, copy, modify and redistribute this package and associated files under the Perl Artistic Licence or the GNU General Public Licence.