function JSON_version() { return 'wrapper'; }
function JSON2js(text) {
- return decodeJS(JSON2jsRaw(text));
+ return decodeJS(JSON.parse(text));
}
JSON2js.fallbackObjectifier = null;
-function JSON2jsRaw(text) {
- var obj;
- eval('obj = ' + text);
- return obj;
-}
-
-
/* iterates over object, arrays, or fieldmapper objects */
function jsIterate( arg, callback ) {
if( arg && typeof arg == 'object' ) {
/* turns a javascript object into a JSON string */
function js2JSON(arg) {
- return js2JSONRaw(encodeJS(arg));
+ return JSON.stringify(encodeJS(arg));
}
-
-function js2JSONRaw(arg) {
-
- if( arg == null )
- return 'null';
-
- var o;
-
- switch (typeof arg) {
-
- case 'object':
-
- if (arg.constructor == Array) {
- o = '';
- jsIterate( arg,
- function(obj, i) {
- if (o) o += ',';
- o += js2JSONRaw(obj[i]);
- }
- );
- return '[' + o + ']';
-
- } else if (typeof arg.toString != 'undefined') {
- o = '';
- jsIterate( arg,
- function(obj, i) {
- if (o) o += ',';
- o = o + js2JSONRaw(i) + ':' + js2JSONRaw(obj[i]);
- }
- );
- return '{' + o + '}';
-
- }
-
- return 'null';
-
- case 'number': return arg;
-
- case 'string':
- var s = String(arg);
- s = s.replace(/\\/g, '\\\\');
- s = s.replace(/"/g, '\\"');
- s = s.replace(/\t/g, "\\t");
- s = s.replace(/\n/g, "\\n");
- s = s.replace(/\r/g, "\\r");
- s = s.replace(/\f/g, "\\f");
- return '"' + s + '"';
-
- case 'boolean':
- return (arg) ? 'true' : 'false';
-
- default: return 'null';
- }
-}
-
-
-function __tabs(c) {
- var s = '';
- for( i = 0; i < c; i++ ) s += '\t';
- return s;
-}
-
-function jsonPretty(str) {
- if(!str) return "";
- var s = '';
- var d = 0;
- for( var i = 0; i < str.length; i++ ) {
- var c = str.charAt(i);
- if( c == '{' || c == '[' ) {
- s += c + '\n' + __tabs(++d);
- } else if( c == '}' || c == ']' ) {
- s += '\n' + __tabs(--d) + '\n';
- if( str.charAt(i+1) == ',' ) {
- s += '\n' + __tabs(d);
- }
- } else if( c == ',' ) {
- s += ',\n' + __tabs(d);
- } else {
- s += c;
- }
- }
- return s;
-}
-
-
// Order of object attributes is not guaranteed
doh.assertTrue(js2JSON({"foo":{"one":[null,"two",2]}}) == '{"foo":{"one":[null,"two",2]}}');
},
- function test_js2JSONRaw_strict() {
- // Solo nulls and booleans are stringified XXX
- doh.assertTrue(js2JSONRaw(null) === "null");
- doh.assertTrue(js2JSONRaw(true) === "true");
- doh.assertTrue(js2JSONRaw(false) === "false");
- },
- function test_js2JSONRaw_numbers() {
- doh.assertTrue(js2JSONRaw(0) === 0);
- doh.assertTrue(js2JSONRaw(1.5) === 1.5);
- doh.assertTrue(js2JSONRaw(.7) === .7);
- },
- function test_js2JSONRaw_strings() {
- doh.assertTrue(js2JSONRaw("") == '""');
- doh.assertTrue(js2JSONRaw("foo") == '"foo"');
- // Escape sequences
- doh.assertTrue(js2JSONRaw("foo\n\t\n") == '"foo\\n\\t\\n"');
- },
- function test_js2JSONRaw_arrays() {
- doh.assertTrue(js2JSONRaw([0,"foo",null,"true",true]) === '[0,"foo",null,"true",true]');
- },
- function test_js2JSONRaw_objects() {
- doh.assertTrue(js2JSONRaw({"foo":"bar"}) == '{"foo":"bar"}');
- doh.assertTrue(js2JSONRaw({"foo":true}) == '{"foo":true}');
- doh.assertTrue(js2JSONRaw({"foo":0}) == '{"foo":0}');
- },
- function test_js2JSONRaw_objects_ordered() {
- // Order of object attributes is not guaranteed
- doh.assertTrue(js2JSONRaw({"foo":{"one":[null,"two",2]}}) == '{"foo":{"one":[null,"two",2]}}');
- },
- function test_JSON2jsRaw_strict() {
- // Standalone quoted nulls and booleans are converted to primitives
- doh.assertTrue(JSON2jsRaw(null) === null);
- doh.assertTrue(JSON2jsRaw("null") === null);
- doh.assertTrue(JSON2jsRaw(true) === true);
- doh.assertTrue(JSON2jsRaw("true") === true);
- doh.assertTrue(JSON2jsRaw(false) === false);
- doh.assertTrue(JSON2jsRaw("false") === false);
- },
- function test_JSON2jsRaw_numbers() {
- // Zero is zero and only zero
- doh.assertTrue(JSON2jsRaw(0) === 0);
- doh.assertTrue(JSON2jsRaw(1.5) === 1.5);
- doh.assertTrue(JSON2jsRaw(.5) === .5);
- },
- function test_JSON2jsRaw_strings() {
- // Empty string
- doh.assertTrue(JSON2jsRaw('""') === "");
- // String
- doh.assertTrue(JSON2jsRaw('"foo"') == "foo");
- },
- function test_JSON2jsRaw_arrays() {
- // Array; access an index
- doh.assertTrue(JSON2jsRaw('[0,1,2,3,4,5]')[1] == 1);
- },
- function test_JSON2jsRaw_objects() {
- // Object; access a key
- doh.assertTrue(JSON2jsRaw('{"foo":"bar"}').foo == "bar");
- doh.assertTrue(JSON2jsRaw('{"foo":{"two":2,"one":null}}').foo.one === null);
- doh.assertTrue(JSON2jsRaw('{"foo":{"two":2,"one":"null"}}').foo.one === "null");
- },
function test_JSON2js_strict() {
// Standalone quoted nulls and booleans are converted to primitives
doh.assertTrue(JSON2js(null) === null);