json :: JSONStringParser :: parse_entity
var p = new JSONStringParser("""{"numbers": [1,23,3], "string": "string"}""")
assert p.parse_entity isa JsonObject
# Parses a JSON Entity
#
# ~~~nit
# var p = new JSONStringParser("""{"numbers": [1,23,3], "string": "string"}""")
# assert p.parse_entity isa JsonObject
# ~~~
fun parse_entity: nullable Serializable do
var srclen = len
ignore_whitespaces
if pos >= srclen then return make_parse_error("Empty JSON")
var c = src[pos]
if c == '[' then
pos += 1
return parse_json_array
else if c == '"' then
var s = parse_json_string
return s
else if c == '{' then
pos += 1
return parse_json_object
else if c == 'f' then
if pos + 4 >= srclen then make_parse_error("Error: bad JSON entity")
if src[pos + 1] == 'a' and src[pos + 2] == 'l' and src[pos + 3] == 's' and src[pos + 4] == 'e' then
pos += 5
return false
end
return make_parse_error("Error: bad JSON entity")
else if c == 't' then
if pos + 3 >= srclen then make_parse_error("Error: bad JSON entity")
if src[pos + 1] == 'r' and src[pos + 2] == 'u' and src[pos + 3] == 'e' then
pos += 4
return true
end
return make_parse_error("Error: bad JSON entity")
else if c == 'n' then
if pos + 3 >= srclen then make_parse_error("Error: bad JSON entity")
if src[pos + 1] == 'u' and src[pos + 2] == 'l' and src[pos + 3] == 'l' then
pos += 4
return null
end
return make_parse_error("Error: bad JSON entity")
end
if not c.is_json_num_start then return make_parse_error("Bad JSON character")
return parse_json_number
end
lib/json/static.nit:167,2--211,4