pub package CI GitHub Tag New Commits Last Commits Pull Requests Code size License Funding Funding

A simple and easy way to map Objects from JSON and to Map with support for Dart Native and Dart Web.

Main features:

  • Works with simple Objects: no method implementation needed.

  • Compatible with Web (JS) and Native (VM) platforms.

  • No @annotations or code generation.

  • Only uses Mirrors if it's available in the platform (transparent load).


You can use simple and easy JSONTransformer patterns to transform a JSON tree.

This helps to integrate JSON trees of 3rd part with your code, UI and Entities.



A simple JSON Object mapping example:

import 'package:json_object_mapper/json_object_mapper.dart';

class User extends JSONObject {
  String username ;
  String email ;

  User.fromFields(this.username, this.email);

  User.fromJson(String json) {
    initializeFromJson(json) ;

  String toString() {
    return 'User{username: $username, email: $email}' ;


main() {
      User user1 = User.fromFields("joe", "joe@mail.com") ;
      print("User[1]: $user1");      
      // User[1]: User{username: joe, email: joe@mail.com}

      // {"username":"joe","email":"joe@mail.com"}

      User user2 = User.fromJson( '{"username":"joe2","email":"joe2@mail.com"}' ) ;
      print("User[2]: $user2");
      // User[2]: User{username: joe2, email: joe2@mail.com}
      // {"username":"joe2","email":"joe2@mail.com"}



A simple JSON tree transformation example:

var json = {
        'result': [
          {'id': 1, 'name': 'a', 'group': 'x'},
          {'id': 2, 'name': 'b', 'group': 'y'},
          {'id': 3, 'name': 'c', 'group': 'z'},

var transformer = JSONTransformer.parse('{result}.mapEntry(name,id).asMap()');

var json2 = transformer.transform(json);

/// json2 = {'a': 1, 'b': 2, 'c': 3}

JSONTransformer Operations

  • {"$key"}: converts node to a $key value of node as Map.
  • [$index]: converts node to a $index value of node as List.
  • asMap(): converts node to a Map.
  • asList(): converts node to a List.
  • asString($delimiter): converts node to a String, using optional $delimiter for node List.
  • mapEntry($key,$value): converts node or node.entries to a MapEntry($key, $value).
  • split($delimiter,$limit?): converts node or node.entries splitting into a List of parts, using $delimiter as RegExp and optional $limit.
  • uc(): converts node or node.entries to an Upper Case String.
  • lc(): converts node or node.entries to a Lower Case String.
  • trim(): converts node or node.entries to a Trimmed String.
  • encodeJson($withIdent): converts node encoding to a JSON String, using optional $withIdent as bool.
  • decodeJson(): converts node or node.entries decoding to a JSON tree.

Features and bugs

Please file feature requests and bugs at the issue tracker.


Graciliano M. Passos: gmpassos@GitHub.


Dart free & open-source license.