Léon Brocard > JSON-YAJL > JSON::YAJL::Parser

Download:
JSON-YAJL-0.10.tar.gz

Dependencies

Annotate this POD

Website

CPAN RT

New  3
Open  0
View/Report Bugs
Module Version: 0.10   Source  

NAME ^

JSON::YAJL::Parser - JSON parsing with YAJL

SYNOPSIS ^

  use JSON::YAJL;
  my $text;
  my $parser = JSON::YAJL::Parser->new(
      0, 0,
      [   sub { $text .= "null\n" },
          sub { $text .= "bool: @_\n" },
          undef,
          undef,
          sub { $text .= "number: @_\n" },
          sub { $text .= "string: @_\n" },
          sub { $text .= "map_open\n" },
          sub { $text .= "map_key: @_\n" },
          sub { $text .= "map_close\n" },
          sub { $text .= "array_open\n" },
          sub { $text .= "array_close\n" },
      ]
  );
  my $json
      = '{"integer":123,"double":4,"number":3.141,"string":"a string","string2":"another string","null":null,"true":true,"false":false,"map":{"key":"value","array":[1,2,3]}}';
  $parser->parse($json);
  $parser->parse_complete();
  # $text is now:
  # map_open
  # map_key: integer
  # number: 123
  # map_key: double
  # number: 4
  # map_key: number
  # number: 3.141
  # map_key: string
  # string: a string
  # map_key: string2
  # string: another string
  # map_key: null
  # null
  # map_key: true
  # bool: 1
  # map_key: false
  # bool: 0
  # map_key: map
  # map_open
  # map_key: key
  # string: value
  # map_key: array
  # array_open
  # number: 1
  # number: 2
  # number: 3
  # array_close
  # map_close
  # map_close

DESCRIPTION ^

This module allows you to parse JSON with YAJL. This is quite a low-level interface for parsing JSON.

You pass callbacks which are called whenever a small token of JSON is parsed.

This is a very early release to see how cross-platform the underlying code is. The API may change in future.

METHODS ^

new

The constructor. You pass in if JavaScript style comments will be allowed in the JSON input (both slash star and slash slash) and if invalid UTF8 strings should cause a parse error. You also pass in callbacks. The missing callbacks below are for integer and double - as there is no difference in Perl they are both sent through the number callback instead.

  my $parser = JSON::YAJL::Parser->new(
      0, 0,
      [   sub { $text .= "null\n" },
          sub { $text .= "bool: @_\n" },
          undef,
          undef,
          sub { $text .= "number: @_\n" },
          sub { $text .= "string: @_\n" },
          sub { $text .= "map_open\n" },
          sub { $text .= "map_key: @_\n" },
          sub { $text .= "map_close\n" },
          sub { $text .= "array_open\n" },
          sub { $text .= "array_close\n" },
      ]
  );

parse

Parses some JSON. You can call this multiple times:

  $parser->parse($json);

parse_complete

Parse any remaining buffered JSON. Since YAJL is a stream-based parser, without an explicit end of input, yajl sometimes can't decide if content at the end of the stream is valid or not. For example, if "1" has been fed in, yajl can't know whether another digit is next or some character that would terminate the integer token:

  $parser->parse_complete();

AUTHOR ^

Leon Brocard <acme@astray.com>

LICENSE ^

This module is free software; you can redistribute it or modify it under the same terms as Perl itself.

SEE ALSO ^

JSON::YAJL, JSON::YAJL::Generator

syntax highlighting: