@@ -0,0 +1,85 @@
3+module Native.Json where
14+ var JS = Elm.JavaScript;
16+ function fromValue(v) {
18+ case 'Null' : return null;
19+ case 'String' : return JS.fromString(v._0);
22+ var array = JS.fromList(Elm.Dict.toList(v._0));
23+ for (var i = arr.length; i--; ) {
24+ obj[JS.fromString(array[i]._0)] = fromValue(array[i]._1);
28+ var array = JS.fromList(v._0);
29+ for (var i = array.length; i--; ) {
30+ array[i] = fromValue(array[i]);
38+ function toPrettyJSString(sep, obj) {
39+ return JSON.stringify(fromValue(obj), null, JS.fromString(sep));
42+ function toValue(v) {
44+ case 'string' : return { ctor:"String", _0: JS.toString(v) };
45+ case 'number' : return { ctor:"Number", _0: JS.toFloat(v) };
46+ case 'boolean': return { ctor:"Bool" , _0: JS.toBool(v) };
48+ if (v === null) return { ctor:"Null" };
49+ if (v instanceof Array) {
50+ for (var i = v.length; i--; ) { v[i] = toValue(v[i]); }
51+ return { ctor:"Array", _0: JS.toList(v) };
54+ for (var k in v) array.push(Tuple2(JS.toString(k), toValue(v[k])));
55+ return { ctor:"Object", _0: Elm.Dict.fromList(JS.toList(array)) };
59+ function fromJSString(str) {
61+ return Elm.Maybe.Just(toValue(JSON.parse(str)));
63+ return Elm.Maybe.Nothing;
67+ function recordFromJSString(str) {
69+ return Elm.Maybe.Just(JS.toRecord(JSON.parse(str)));
71+ return Elm.Maybe.Nothing;
74+ function recordToPrettyJSString(sep, rec) {
75+ return JSON.stringify(JS.fromRecord(rec), null, JS.fromString(sep));
79+ toPrettyJSString : F2(toPrettyJSString),
80+ fromJSString : fromJSString,
81+ recordToPrettyJSString : F2(recordToPrettyJSString),
82+ recordFromJSString : recordFromJSString