summaryrefslogtreecommitdiff
path: root/AK/JsonValue.cpp
AgeCommit message (Collapse)Author
2021-12-16AK: Make JsonValue::from_string("") return a null JsonValueAndreas Kling
This unbreaks the /var/run/utmp system which starts out as an empty string, and is then turned into an object by the first update. This isn't necessarily the best way for this to work, but it's how it used to work, so this just fixes the regression for now.
2021-11-17AK: Make JSON parser return ErrorOr<JsonValue> (instead of Optional)Andreas Kling
Also add slightly richer parse errors now that we can include a string literal with returned errors. This will allow us to use TRY() when working with JSON data.
2021-11-11Everywhere: Pass AK::StringView by valueAndreas Kling
2021-06-29Kernel+AK: Don't compile JSON parser into the kernelAndreas Kling
The kernel doesn't consume JSON, it only produces it. So there's no need for the kernel to have a JSON parser built into it. :^)
2021-06-29AK+Everywhere: Change int to size_t in JsonObject and JsonArrayMax Wipfli
2021-06-03AK: Remove unused JsonValue <=> IPv4Address conversion codeGunnar Beutner
This removes code that isn't used anywhere.
2021-04-22Everything: Move to SPDX license identifiers in all files.Brian Gianforcaro
SPDX License Identifiers are a more compact / standardized way of representing file license information. See: https://spdx.dev/resources/use/#identifiers This was done with the `ambr` search and replace tool. ambr --no-parent-ignore --key-from-file --rep-from-file key.txt rep.txt *
2021-02-23Everywhere: Rename ASSERT => VERIFYAndreas Kling
(...and ASSERT_NOT_REACHED => VERIFY_NOT_REACHED) Since all of these checks are done in release builds as well, let's rename them to VERIFY to prevent confusion, as everyone is used to assertions being compiled out in release. We can introduce a new ASSERT macro that is specifically for debug checks, but I'm doing this wholesale conversion first since we've accumulated thousands of these already, and it's not immediately obvious which ones are suitable for ASSERT.
2021-02-08Everywhere: Remove unnecessary headers 4/4Ben Wiederhake
Arbitrarily split up to make git bisect easier. These unnecessary #include's were found by combining an automated tool (which determined likely candidates) and some brain power (which decided whether the #include is also semantically superfluous).
2021-02-08Everywhere: Remove unnecessary headers 1/4Ben Wiederhake
Arbitrarily split up to make git bisect easier. These unnecessary #include's were found by combining an automated tool (which determined likely candidates) and some brain power (which decided whether the #include is also semantically superfluous). My favorite #include: #include "Applications/Piano/Music.h" // You can't have too much music in life!
2020-07-06AK: Fix JsonValue copy constructor behavior for 64-bit valuesAndreas Kling
The fact that JsonValues can contain 64-bit values isn't a JavaScript compatible behavior in the first place, but as long as we're supporting this, we should make sure it works correctly.
2020-06-13AK: JsonParser improvementsMatthew Olsson
- 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
2020-05-22AK: Make JsonValue and JsonObjectSerializer speak int/long/long longAndreas Kling
While width-oriented integer types are nicer from the programmer's perspective, we have to accept that C++ thinks in int/long/long long.
2020-05-16Kernel: Absorb LibBareMetal back into the kernelAndreas Kling
This was supposed to be the foundation for some kind of pre-kernel environment, but nobody is working on it right now, so let's move everything back into the kernel and remove all the confusion.
2020-04-01AK: Add equals method to JsonValue to semantically compare two values.Emanuel Sprung
This patchsets adds the semantic check of two values. One first approach was to compare the (generated) json strings of the two values. This works out in the most cases, but not with numbers, where "1.0" and "1" in JSON format are semantically the same. Therefore, this patch adds deep (recursive) check of two JsonValues.
2020-02-09AK: Apply changes for the Bootstrapper environmentLiav A
2020-01-23AK: Let's call decrementing reference counts "unref" instead of "deref"Andreas Kling
It always bothered me that we're using the overloaded "dereference" term for this. Let's call it "unreference" instead. :^)
2020-01-18Meta: Add license header to source filesAndreas Kling
As suggested by Joshua, this commit adds the 2-clause BSD license as a comment block to the top of every source file. For the first pass, I've just added myself for simplicity. I encourage everyone to add themselves as copyright holders of any file they've added or modified in some significant way. If I've added myself in error somewhere, feel free to replace it with the appropriate copyright holder instead. Going forward, all new source files should include a license header.
2019-10-29AK: Allow JsonValue to store 64-bit integers internallyAndreas Kling
Add dedicated internal types for Int64 and UnsignedInt64. This makes it a bit more straightforward to work with 64-bit numbers (instead of just implicitly storing them as doubles.)
2019-08-07JSON: Templatize the JSON serialization codeAndreas Kling
This makes it possible to use something other than a StringBuilder for serialization (and to produce something other than a String.) :^)
2019-08-04JsonObject: Add move constructors for JsonObject(Json{Array,Object}&&)Andreas Kling
This also helps avoid JsonValue copying during parse.
2019-07-08AK: Make it easy to convert between JsonValue and IPv4Address.Andreas Kling
They still use string storage, but this change makes it nice and easy to work with IPv4 addresses in JSON data.
2019-06-29JsonValue: No need to null-check StringImpls if type is Type::String.Andreas Kling
If you try to create a JsonValue from a null String(), it will become a null JsonValue anyway.
2019-06-29Kernel: Change the format of /proc/all to JSON.Andreas Kling
Update ProcessManager, top and WSCPUMonitor to handle the new format. Since the kernel is not allowed to use floating-point math, we now compile the JSON classes in AK without JsonValue::Type::Double support. To accomodate large unsigned ints, I added a JsonValue::Type::UnsignedInt.
2019-06-24AK: Let's put the JSON parsing in a separate class.Andreas Kling
2019-06-24AK: Implement a naive JSON parser.Andreas Kling
This parser assumes that the JSON is well-formed and will choke horribly on invalid input. Since we're primarily interested in parsing our own output right now, this is less of a problem. Longer-term we're gonna need something better. :^)
2019-06-21AK: Rename Retainable => RefCounted.Andreas Kling
(And various related renames that go along with it.)
2019-06-18AK: Rename JsonObject::to_string() and pals to serialized().Andreas Kling
And the variant that serializes into a StringBuilder is called serialize().
2019-06-18AK: Fix leak in JsonValue::operator=(JsonValue&&).Andreas Kling
Amusingly I introduced this leak while explaining that this type of leak is a common bug, and saying I'm used to looking for it. :^)
2019-06-18AK: Add JsonValue(const char*).Andreas Kling
This should obviously become a string, but if we don't have it, constructing from a string literal ends up creating a boolean value.
2019-06-18AK: Add JsonValue(unsigned) ctor and as_string().Andreas Kling
2019-06-17AK: Use a single StringBuilder throughout JSON serialization.Andreas Kling
2019-06-17AK: Add some classes for JSON encoding.Andreas Kling
This patch adds JsonValue, JsonObject and JsonArray. You can use them to build up a JsonObject and then serialize it to a string via to_string(). This patch only implements encoding, no decoding yet.