Perl6 bindigs for json-c
Branch: master
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
lib Parallelize unmarshaling of top level Array May 14, 2016
t Add tests, documentations and benchamarks May 6, 2016
META6.json Update META6.json May 9, 2016
README.md
benchmark.pl6

README.md

JsonC

Using NativeCall this module binds to the popular json-c library, offering a different approach to JSON handling in Perl6.

In adition to the traditional to-json and from-json routines this module provides a JSON class.

Usage

use JsonC;

# The traditional API use the same semantincs of other JSON modules.

my %h = from-json('{ "foo": "mamá", "arr": [ 1, 4, 10 ] }');

my $str = to-json(%h, :pretty);

So JsonC can be used as a drop-in replacement, see "pros" and "cons" ahead.

If you need finer grained control over the process, or the JSON data is big, you can use the full power of this module:

use JsonC;

my $json = JSON.new-from-file('foo.json');

given $json {
    when Associative {
       # You got an object.
       say $_<foo>;
       say so $_<bar>:exists;
       for %$_.pairs {
            # Do someting
       }
    }
    when Positional {
       # You got an array
       my @a := $_;         # You can bind to one
       say @a[10..20];

       say @a.elems;        # How many

       my $foo = @a.shift;

       # But beware:
       say so @a ~~ Array;  # False, not a Perl6's Array
       say so @a ~~ JSON-P; # True   but a JSON Positional

       # Need a real Array?
       my @foo = @a;         # Do a copy to an Array;
       my @bar := Array(@a); # Or cast to one, better
    }
    when Int { ... }
    when Bool { ... }
    when Str { ... }
    when Any { ... } # null
}