Advertisement
rg443

json_encode.js

Dec 18th, 2015
267
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. function json_encode(mixed_val) {
  2.   var retVal, json = this.window.JSON;
  3.   try {
  4.     if (typeof json === "object" && typeof json.stringify === "function") {
  5.       retVal = json.stringify(mixed_val);
  6.       if (retVal === undefined) {
  7.         throw new SyntaxError("json_encode");
  8.       }
  9.       return retVal;
  10.     }
  11.     var value = mixed_val;
  12.     var quote = function(string) {
  13.       var escapable = /[\\\"\u0000-\u001f\u007f-\u009f\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g;
  14.       var meta = {"\b":"\\b", "\t":"\\t", "\n":"\\n", "\f":"\\f", "\r":"\\r", '"':'\\"', "\\":"\\\\"};
  15.       escapable.lastIndex = 0;
  16.       return escapable.test(string) ? '"' + string.replace(escapable, function(a) {
  17.         var c = meta[a];
  18.         return typeof c === "string" ? c : "\\u" + ("0000" + a.charCodeAt(0).toString(16)).slice(-4);
  19.       }) + '"' : '"' + string + '"';
  20.     };
  21.     var str = function(key, holder) {
  22.       var gap = "";
  23.       var indent = "    ";
  24.       var i = 0;
  25.       var k = "";
  26.       var v = "";
  27.       var length = 0;
  28.       var mind = gap;
  29.       var partial = [];
  30.       var value = holder[key];
  31.       if (value && typeof value === "object" && typeof value.toJSON === "function") {
  32.         value = value.toJSON(key);
  33.       }
  34.       switch(typeof value) {
  35.         case "string":
  36.           return quote(value);
  37.         case "number":
  38.           return isFinite(value) ? String(value) : "null";
  39.         case "boolean":
  40.         ;
  41.         case "null":
  42.           return String(value);
  43.         case "object":
  44.           if (!value) {
  45.             return "null";
  46.           }
  47.           if (this.PHPJS_Resource && value instanceof this.PHPJS_Resource || window.PHPJS_Resource && value instanceof window.PHPJS_Resource) {
  48.             throw new SyntaxError("json_encode");
  49.           }
  50.           gap += indent;
  51.           partial = [];
  52.           if (Object.prototype.toString.apply(value) === "[object Array]") {
  53.             length = value.length;
  54.             for (i = 0;i < length;i += 1) {
  55.               partial[i] = str(i, value) || "null";
  56.             }
  57.             v = partial.length === 0 ? "[]" : gap ? "[\n" + gap + partial.join(",\n" + gap) + "\n" + mind + "]" : "[" + partial.join(",") + "]";
  58.             gap = mind;
  59.             return v;
  60.           }
  61.           for (k in value) {
  62.             if (Object.hasOwnProperty.call(value, k)) {
  63.               v = str(k, value);
  64.               if (v) {
  65.                 partial.push(quote(k) + (gap ? ": " : ":") + v);
  66.               }
  67.             }
  68.           }
  69.           v = partial.length === 0 ? "{}" : gap ? "{\n" + gap + partial.join(",\n" + gap) + "\n" + mind + "}" : "{" + partial.join(",") + "}";
  70.           gap = mind;
  71.           return v;
  72.         case "undefined":
  73.         ;
  74.         case "function":
  75.         ;
  76.         default:
  77.           throw new SyntaxError("json_encode");;
  78.       }
  79.     };
  80.     return str("", {"":value});
  81.   } catch (err) {
  82.     if (!(err instanceof SyntaxError)) {
  83.       throw new Error("Unexpected error type in json_encode()");
  84.     }
  85.     this.php_js = this.php_js || {};
  86.     this.php_js.last_error_json = 4;
  87.     return null;
  88.   }
  89. }
  90. ;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement