3 KiB
Belatuk JSON Serializer
Replacement of package:json_god
with breaking changes to support NNBD.
The new and improved definitive solution for JSON in Dart. It supports synchronously transform an object into a JSON string and also deserialize a JSON string back into an instance of any type.
Installation
dependencies:
belatuk_json_serializer: ^7.1.0
Usage
It is recommended to import the library under an alias, i.e., jsonSerializer
.
import 'package:belatuk_json_serialization/belatuk_json_serialization.dart' as jsonSerializer;
Serializing JSON
Simply call jsonSerializer.serialize(x)
to synchronously transform an object into a JSON
string.
Map map = {"foo": "bar", "numbers": [1, 2, {"three": 4}]};
// Output: {"foo":"bar","numbers":[1,2,{"three":4]"}
String json = jsonSerializer.serialize(map);
print(json);
You can easily serialize classes, too. Belatuk JSON Serializer also supports classes as members.
class A {
String foo;
A(this.foo);
}
class B {
late String hello;
late A nested;
B(String hello, String foo) {
this.hello = hello;
this.nested = A(foo);
}
}
main() {
print(jsonSerializer.serialize( B("world", "bar")));
}
// Output: {"hello":"world","nested":{"foo":"bar"}}
If a class has a toJson
method, it will be called instead.
Deserializing JSON
Deserialization is equally easy, and is provided through jsonSerializer.deserialize
.
Map map = jsonSerializer.deserialize('{"hello":"world"}');
int three = jsonSerializer.deserialize("3");
Deserializing to Classes
Belatuk JSON Serializer lets you deserialize JSON into an instance of any type. Simply pass the type as the second argument to jsonSerializer.deserialize
.
If the class has a fromJson
constructor, it will be called instead.
class Child {
String foo;
}
class Parent {
String hello;
Child child = Child();
}
main() {
Parent parent = jsonSerializer.deserialize('{"hello":"world","child":{"foo":"bar"}}', Parent);
print(parent);
}
Any JSON-deserializable classes must initializable without parameters. If Foo()
would throw an error, then you can't use Foo with JSON.
This allows for validation of a sort, as only fields you have declared will be accepted.
class HasAnInt { int theInt; }
HasAnInt invalid = jsonSerializer.deserialize('["some invalid input"]', HasAnInt);
// Throws an error
An exception will be thrown if validation fails.