platform-common-utilities/packages/json_serializer
2024-05-21 23:51:17 +08:00
..
example Added pretty_logging and json_serializer 2021-09-16 11:23:05 +08:00
lib Updated to use lints 3.0.0 2023-12-12 10:10:10 +08:00
test Migrated to Dart 3 2023-03-26 09:38:56 +08:00
analysis_options.yaml Added pretty_logging and json_serializer 2021-09-16 11:23:05 +08:00
AUTHORS.md Added pretty_logging and json_serializer 2021-09-16 11:23:05 +08:00
CHANGELOG.md Updated Changelog 2024-05-21 23:51:17 +08:00
LICENSE Added pretty_logging and json_serializer 2021-09-16 11:23:05 +08:00
melos_belatuk_json_serializer.iml Upgraded to support sdk 2.17 2022-07-06 22:04:09 +08:00
pubspec.yaml Updated to min dart sdk 3.3 2024-05-21 23:08:07 +08:00
README.md Updated to use lints 3.0.0 2023-12-12 10:10:10 +08:00

Belatuk JSON Serializer

Pub Version (including pre-releases) Null Safety Gitter License

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.