diff --git a/examples/jsx_parser.erl b/examples/jsx_parser.erl index 5a9e3ba..a302843 100644 --- a/examples/jsx_parser.erl +++ b/examples/jsx_parser.erl @@ -32,7 +32,7 @@ %% also is not streaming, though it could be modified to parse partial objects/lists. decode(JSON) -> - P = jsx:decoder({{jsx_parser, event}, []}, []), + P = jsx:decoder({jsx_parser, event, []}, []), case P(JSON) of {incomplete, _} -> {error, badjson} diff --git a/examples/jsx_prettify.erl b/examples/jsx_prettify.erl index d99cb40..5ebbef9 100644 --- a/examples/jsx_prettify.erl +++ b/examples/jsx_prettify.erl @@ -34,7 +34,7 @@ pretty(JSON, Opts) -> Init = init(parse_opts(Opts, #opts{})), - P = jsx:decoder({{jsx_prettify, jsx_event}, Init}, []), + P = jsx:decoder({jsx_prettify, jsx_event, Init}, []), case P(JSON) of {incomplete, _} -> {error, badjson} ; {error, badjson} -> {error, badjson} @@ -93,7 +93,7 @@ format(string, String) -> format(literal, Literal) -> erlang:atom_to_list(Literal); format(_, Number) -> - Number; + Number. indent(Indent, Level) -> diff --git a/examples/jsx_stream_parser.erl b/examples/jsx_stream_parser.erl index ec673df..f9f6516 100644 --- a/examples/jsx_stream_parser.erl +++ b/examples/jsx_stream_parser.erl @@ -27,7 +27,7 @@ -export([decoder/1, event/2]). decoder(Opts) -> - Decoder = jsx:decoder({{jsx_stream_parser, event}, 0}, Opts), + Decoder = jsx:decoder({jsx_stream_parser, event, 0}, Opts), fun(Stream) -> try case Decoder(Stream) of {incomplete, F} -> {incomplete, F} diff --git a/examples/jsx_verify.erl b/examples/jsx_verify.erl new file mode 100644 index 0000000..f6ef848 --- /dev/null +++ b/examples/jsx_verify.erl @@ -0,0 +1,52 @@ +%% The MIT License + +%% Copyright (c) 2010 Alisdair Sullivan + +%% Permission is hereby granted, free of charge, to any person obtaining a copy +%% of this software and associated documentation files (the "Software"), to deal +%% in the Software without restriction, including without limitation the rights +%% to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +%% copies of the Software, and to permit persons to whom the Software is +%% furnished to do so, subject to the following conditions: + +%% The above copyright notice and this permission notice shall be included in +%% all copies or substantial portions of the Software. + +%% THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +%% IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +%% FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +%% AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +%% LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +%% OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +%% THE SOFTWARE. + + +-module(jsx_verify). +-author("alisdairsullivan@yahoo.ca"). + +-export([is_json/1, event/2]). + + + +%% this is a strict parser, no comments, no naked values and only one key per object. it +%% also is not streaming, though it could be modified to parse partial objects/lists. + +is_json(JSON) -> + P = jsx:decoder({jsx_verify, event, ok}, []), + case P(JSON) of + {incomplete, _} -> + false + ; {error, badjson} -> + false + ; _ -> + true + end. + + +%% erlang representation is dicts for objects and lists for arrays. these are pushed +%% onto a stack, the top of which is our current level, deeper levels represent parent +%% and grandparent levels in the json structure. keys are also stored on top of the array +%% during parsing of their associated values. + +event(_, ok) -> + ok.