Skip to content

Commit 09c3c64

Browse files
committed
Merge pull request #39 from stevenroose/master
Merge PR: Added recursive constructor option to allow for reviver functions
2 parents 615b4ce + 3324435 commit 09c3c64

File tree

1 file changed

+11
-13
lines changed

1 file changed

+11
-13
lines changed

lib/json_object.dart

Lines changed: 11 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -29,9 +29,6 @@ void _log(obj) {
2929
*/
3030
@proxy
3131
class JsonObject<E> extends Object implements Map, Iterable {
32-
/// The original JSON string
33-
var _jsonString;
34-
3532
/// Contains either a [List] or [Map]
3633
var _objectData;
3734

@@ -99,8 +96,7 @@ class JsonObject<E> extends Object implements Map, Iterable {
9996
if (t == null) {
10097
t = new JsonObject();
10198
}
102-
t._jsonString = _jsonString;
103-
t._objectData = decoder.convert(t._jsonString);
99+
t._objectData = decoder.convert(_jsonString);
104100
t._extractElements(t._objectData);
105101
t.isExtendable = false;
106102
return t;
@@ -109,16 +105,18 @@ class JsonObject<E> extends Object implements Map, Iterable {
109105

110106
/** An alternate constructor, allows creating directly from a map
111107
* rather than a json string.
108+
*
109+
* If [recursive] is true, all values of the map will be converted
110+
* to [JsonObject]s as well. The default value is [true].
112111
*/
113-
JsonObject.fromMap(Map map) {
114-
_jsonString = encoder.convert(map);
112+
JsonObject.fromMap(Map map, [bool recursive = true]) {
115113
_objectData = map;
116-
_extractElements(_objectData);
114+
if(recursive)
115+
_extractElements(_objectData);
117116
isExtendable = false;
118117
}
119118

120119
static JsonObject toTypedJsonObject(JsonObject src, JsonObject dest) {
121-
dest._jsonString = src._jsonString;
122120
dest._objectData = src._objectData;
123121
dest.isExtendable = false;
124122
return dest;
@@ -263,14 +261,14 @@ class JsonObject<E> extends Object implements Map, Iterable {
263261

264262
@deprecated
265263
E firstMatching(bool test(E value), { E orElse() : null }) {
266-
if (orElse != null) this.toIterable().firstWhere(test, orElse: orElse);
267-
else this.toIterable().firstWhere(test);
264+
if (orElse != null) return this.toIterable().firstWhere(test, orElse: orElse);
265+
else return this.toIterable().firstWhere(test);
268266
}
269267

270268
@deprecated
271269
E lastMatching(bool test(E value), {E orElse() : null}) {
272-
if (orElse != null) this.toIterable().lastWhere(test, orElse: orElse);
273-
else this.toIterable().lastWhere(test);
270+
if (orElse != null) return this.toIterable().lastWhere(test, orElse: orElse);
271+
else return this.toIterable().lastWhere(test);
274272
}
275273

276274
@deprecated

0 commit comments

Comments
 (0)