chrisbu / dartwatch-JsonObject

JsonObject which allows dot notation access to JSON.parse'd objects. Read the article on http://www.dartlang.org/articles/json-web-service/
http://www.dartlang.org/articles/json-web-service/
MIT License
83 stars 25 forks source link

JsonObject for DART (http://www.dartlang.org)

Version 1.0.19

Usage: Add to pubspec.yaml:

dependencies:
  json_object: any    

Now M7 (Dart Beta) compatible.

All tests passing with SDK 0.8.10.3_r29803

See Changelog.

You can use JsonObject in two different ways.

1 Accessing JSON Maps in a class-based fashion

Read the article about using this on the dartlang website: http://www.dartlang.org/articles/json-web-service/

JsonObject takes a json string representation, and uses the dart:json library to parse it back into a map. JsonObject then takes the parsed output, and converts any maps (recursively) into JsonObjects, which allow use of dot notation for property access (via noSuchMethod).

Examples:

// create from existing JSON
var person = new JsonObject.fromJsonString('{"name":"Chris"}');
print(person.name);
person.name = "Chris B";
person.namz = "Bob"; //throws an exception, as it wasn't in the original json
                     //good for catching typos

person.isExtendable = true;
person.namz = "Bob" //this is allowed now
String jsonString = JSON.encode(person); // convert back to JSON

It implements Map, so you can convert it back to Json using JSON.encode():

// starting from an empty map
var animal = new JsonObject();  
animal.legs = 4;  // equivalent to animal["legs"] = 4;
animal.name = "Fido"; // equivalent to animal["name"] = "Fido";
String jsonString = JSON.encode(animal); // convert to JSON

Take a look at the unit tests to get an idea of how you can use it.


2. Experimental Using reflection to serialize from a real class instance to JSON

(Requires use of a the experimental mirrors branch)

Use objectToJson(myObj) to return a future containing the serialized string.

Example: import 'package:json_object/json_object.dart';

class Other {
    String name = "My Name";
}

class Basic {
   String myString = "foo";
   int myInt = 42;
   Other name = new Other();
}

main() {
  var basic = new Basic();
  objectToJson(basic).then((jsonStr) => print(jsonStr));
}

TODO:

Many of the unit tests are based around specific questions from users, either here or on stack overflow.