|
488 | 488 | return arr; |
489 | 489 | } |
490 | 490 |
|
| 491 | + /** @memberOf JSROOT |
| 492 | + * Method converts JavaScript object into ROOT-like JSON. |
| 493 | + * Produced JSON can be used in JSROOT.parse() again */ |
| 494 | + JSROOT.toJSON = function(obj) { |
| 495 | + if (!obj || typeof obj !== 'object') return ""; |
| 496 | + |
| 497 | + var map = []; // map of stored objects |
| 498 | + |
| 499 | + function copy_value(value) { |
| 500 | + if (typeof value === "function") return undefined; |
| 501 | + |
| 502 | + if ((value===undefined) || (value===null) || (typeof value !== 'object')) return value; |
| 503 | + |
| 504 | + var proto = Object.prototype.toString.apply(value); |
| 505 | + |
| 506 | + // typed array need to be converted into normal array, otherwise looks strange |
| 507 | + if ((proto.indexOf('[object ') == 0) && (proto.indexOf('Array]') == proto.length-6)) { |
| 508 | + var arr = new Array(value.length) |
| 509 | + for (var i = 0; i < value.length; ++i) |
| 510 | + arr[i] = copy_value(value[i]); |
| 511 | + return arr; |
| 512 | + } |
| 513 | + |
| 514 | + // this is how reference is code |
| 515 | + var refid = map.indexOf(value); |
| 516 | + if (refid >= 0) return { $ref: refid }; |
| 517 | + |
| 518 | + map.push(value); |
| 519 | + |
| 520 | + var ks = Object.keys(value), len = ks.length, tgt = {}, name; |
| 521 | + |
| 522 | + for (var k = 0; k < len; ++k) { |
| 523 | + name = ks[k]; |
| 524 | + tgt[name] = copy_value(value[name]); |
| 525 | + } |
| 526 | + |
| 527 | + return tgt; |
| 528 | + } |
| 529 | + |
| 530 | + var tgt = copy_value(obj); |
| 531 | + |
| 532 | + return JSON.stringify(tgt); |
| 533 | + } |
| 534 | + |
491 | 535 | /** @memberOf JSROOT */ |
492 | 536 | JSROOT.GetUrlOption = function(opt, url, dflt) { |
493 | 537 | // analyzes document.URL and extracts options after '?' mark |
|
0 commit comments