JSFiddle - React, Tailwind, and code Playground
by Frithjof Winkelmann
JavaScript
//Erweiterte JSON, die auch spezielle Objekte parst und zu JSON umwandelt:
//Objekte, die sich selbst enthalten
//Objekte, die Funktionen enthalten
var JSONE = {};
JSONE.to = {};
JSONE.to.removeCycle = function (obj, already = [], lvl = 1, path = "PATH#obj") {
if (typeof obj === "object") {
for (var i in already) {
if (already[i].obj === obj && (already[i].lvl < lvl - 1 || already[i].lvl == 0)) {
return already[i].loc;
}
}
if (lvl === 1) {
already.push({
obj: obj,
loc: path,
lvl: 0
});
}
for (var i in obj) {
already.push({
obj: obj[i],
loc: path + "." + i,
lvl: lvl
});
}
for (var i in obj) {
obj[i] = JSONE.to.removeCycle(obj[i], already, lvl + 1, path + "." + i);
}
}
return obj;
}
JSONE.to.changeFuncs = function (obj) {
if (typeof obj === "function") {
return "FUNCTION#" + obj.toString();
} else if (typeof obj === "object") {
var cl = clone(obj);
for (var i in cl) {
cl[i] = JSONE.to.changeFuncs(cl[i]);
}
return cl;
}
return obj;
}
JSONE.stringify = function (obj) {
if (typeof obj === "object") {
for (var i in JSONE.to) {
obj = JSONE.to[i](obj);
}
}
return JSON.stringify(obj);
}
JSONE.from = {};
JSONE.from.addFuncs = function (obj) {
if (typeof obj === "string" && obj.substr(0, 9) === "FUNCTION#") {
var ret;
try {
eval("ret = " + obj.substr(9));
return ret;
} catch (e) {
return obj;
}
} else if (typeof obj === "object") {
for (var i in obj) {
obj[i] = JSONE.from.addFuncs(obj[i]);
}
return obj;
}
return obj;
}
JSONE.from.addCycle = function (obj, paths = [], already = [],...