This parser uses Applicative and the newtype, Parser, to parse JSON.
It either succeeds or fails, returning Nothing.
Note that the newtype, Parser
, as well as some of the other code within SExpr.hs and
AParser.hs comes from Professor Brent Yorgey's U of Penn class.
Prelude> :l JsonParser.hs
[1 of 4] Compiling AParser ( AParser.hs, interpreted )
[2 of 4] Compiling Model ( Model.hs, interpreted )
[3 of 4] Compiling SExpr ( SExpr.hs, interpreted )
[4 of 4] Compiling JsonParser ( JsonParser.hs, interpreted )
Ok, modules loaded: JsonParser, SExpr, Model, AParser.
*JsonParser> runParser parseJson "[1,2,3]"
Just (JArray (Arr [Num 1.0,Num 2.0,Num 3.0]),"")
*JsonParser> runParser parseJson " { \"foo\" : \"bar\" } "
Just (JObject "foo" (fromList [S "bar"])," ")
*JsonParser> runParser parseJson " { \"foo\" : [\"bar\", true, null] } "
Just (JObject "foo" (fromList [S "bar",B True,N Null])," ")
*JsonParser> runParser parseJson " { \"foo\" : whoops "
Nothing
*JsonParser> runParser parseJson " { \"foo\" : [1,2,\"\\\" with escaped quote \\\" \"] } "
Just (JObject "foo" (fromList [Num 1.0,Num 2.0,S "\" with escaped quote \" "])," ")
- Support all escaped characters
- Re-factor to return error information upon a parse error
- Test it (besides the few examples I've used so far)