allenap/elm-json-decode-broken/2.0.0

NOTE: the latest version is 3.0.2

Json.Decode.Broken

Parse/decode broken JSON.

Parsing

When successful, parsing returns a Json.Encode.Value. Use with with Json.Decode.decodeValue to extract the information you need into your application's data structures.

parse : String -> Result (List DeadEnd) Value

Parse the given JSON string.

This assumes a spec-compliant JSON string; it will choke on "broken" JSON. This seems kind of weird for a package that's all about parsing broken JSON. However, we all have to start somewhere. Read the code, copy it, modify it, make it work for your use case.

Errors come straight from elm/parser and may not be super useful. Sorry.

Parser building blocks

A parser for a JSON value is:

Parser.oneOf [ object, array, string, number, true, false, null ]

According to the specification, a JSON document is optional whitespace, a JSON value (that oneOf … expression above), then more optional whitespace – and that's what the json parser does. Hence parsing a compliant JSON document is nothing more than:

Parser.run json "…"

Use these building blocks to compose a parser for broken JSON as you need. If you need to parse non-compliant quoted strings, for example, it might be best to copy just the string code from this module into your project, and use the other parsers in this module – object, array, and so on – to compose a new parser.

json : Parser Value

Parser for JSON.

This is a JSON value surrounded by optional whitespace.

object : Parser Value

Parser for a JSON object.

array : Parser Value

Parser for a JSON array.

string : Parser Value

Parser for a quoted JSON string.

string and some of its helpers have been adapted from elm/parser's DoubleQuoteString example.

number : Parser Value

Parser for a JSON number.

true : Parser Value

Parser for a JSON 'true' literal.

false : Parser Value

Parser for a JSON 'false' literal.

null : Parser Value

Parser for a JSON 'null' literal.

ws : Parser ()

Parser for JSON whitespace.

This is the whitespace that appears between significant elements of JSON, and before and after JSON documents, not whitespace within quoted strings.