1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-05-14 09:14:58 +00:00

AK: JsonParser improvements

- Parsing invalid JSON no longer asserts
    Instead of asserting when coming across malformed JSON,
    JsonParser::parse now returns an Optional<JsonValue>.
- Disallow trailing commas in JSON objects and arrays
- No longer parse 'undefined', as that is a purely JS thing
- No longer allow non-whitespace after anything consumed by the initial
  parse() call. Examples of things that were valid and no longer are:
    - undefineddfz
    - {"foo": 1}abcd
    - [1,2,3]4
- JsonObject.for_each_member now iterates in original insertion order
This commit is contained in:
Matthew Olsson 2020-06-10 21:40:27 -07:00 committed by Andreas Kling
parent 39576b2238
commit e8e728454c
29 changed files with 189 additions and 118 deletions

View file

@ -75,7 +75,7 @@ void JsonValue::copy_from(const JsonValue& other)
JsonValue::JsonValue(JsonValue&& other)
{
m_type = exchange(other.m_type, Type::Undefined);
m_type = exchange(other.m_type, Type::Null);
m_value.as_string = exchange(other.m_value.as_string, nullptr);
}
@ -83,7 +83,7 @@ JsonValue& JsonValue::operator=(JsonValue&& other)
{
if (this != &other) {
clear();
m_type = exchange(other.m_type, Type::Undefined);
m_type = exchange(other.m_type, Type::Null);
m_value.as_string = exchange(other.m_value.as_string, nullptr);
}
return *this;
@ -247,11 +247,11 @@ void JsonValue::clear()
default:
break;
}
m_type = Type::Undefined;
m_type = Type::Null;
m_value.as_string = nullptr;
}
JsonValue JsonValue::from_string(const StringView& input)
Optional<JsonValue> JsonValue::from_string(const StringView& input)
{
return JsonParser(input).parse();
}