|
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150 |
- <!DOCTYPE html>
- <html>
- <head>
- <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
- <title>json</title>
- <style>
- html, body {
- margin: 0;
- padding: 0;
- overflow: hidden;
- }
-
- body {
- height: 100vh;
- width: 100vw;
- }
- </style>
- </head>
- <body>
- <script>
- var мир = {};
- мир.путь = function(пп) {
- var уровень = мир;
- var длина = пп.length;
- for (var i = 0; i < длина; ++i)
- {
- var п = пп[i];
- if (уровень[п])
- {
- уровень = уровень[п];
- }
- else
- {
- уровень[п] = {};
- уровень = уровень[п];
- console.debug("создаём уровень", i, п, уровень);
- };
- }
- return уровень;
- };
- мир.строкаПути = function(п) {
- function вСтроку(ключ) {
- return `["${ключ}"]`;
- }
- return "мир" + п.map(вСтроку).join("") + " = ";
- };
- мир.задатьЗначение = function(путь, значение) {
- var уровень = мир;
- var длина = путь.length;
- for (var i = 0; i < длина; ++i)
- {
- var п = путь[i];
- var конец = (i == длина - 1);
- if (уровень[п])
- {
- if (конец)
- {
- уровень[п] = значение;
- }
- else
- {
- уровень = уровень[п];
- }
- }
- else
- {
- if (конец)
- {
- уровень[п] = значение;
- }
- else
- {
- уровень[п] = {};
- }
- };
- }
- };
- мир.разобрать = function(словарь, путь = []) {
- for (ключ in словарь)
- {
- var внутреннийПуть = путь.slice();
- внутреннийПуть.push(ключ);
- var значение = словарь[ключ];
- console.debug("ключ/путь/значение", ключ, внутреннийПуть, значение);
- var уровень = мир.путь(внутреннийПуть);
- if (typeof значение === "string")
- {
- // Функция.
- if (значение.startsWith("function"))
- {
- var содержимое = мир.строкаПути(внутреннийПуть) + значение;
- console.debug("содержимое", содержимое);
- eval(содержимое);
- }
- // Строка.
- else
- {
- console.debug("строка", значение);
- var содержимое = мир.строкаПути(внутреннийПуть) + '"' + значение + '"';
- eval(содержимое);
- //уровень = значение;
- //мир.задатьЗначение(внутреннийПуть, значение);
- }
- }
- // Вложенный объект/слоарь.
- else if (значение === Object(значение))
- {
- мир.разобрать(значение, внутреннийПуть);
- }
- // Неизвестное.
- else
- {
- console.error("неизвестная пара ключ/значение", ключ, значение);
- }
- }
- };
-
- var json1 = {};
- json1.вывести = function(аргумент) {
- console.debug('выводим аргумент:', аргумент);
- }.toString();
- json1.пример = function(аргумент) {
- мир.вывести("уга");
- console.debug("функция-пример исполнена. аргумент:", аргумент);
- }.toString();
- json1.набор = {
- проба: function() {
- console.debug("это проба");
- }.toString(),
- простоСтрока: "уппамам",
- };
-
- json2 = JSON.stringify(json1);
- console.debug("2", json2);
-
- var json3 = JSON.parse(json2);
- console.debug("3", json3);
-
- мир.разобрать(json3);
-
- console.debug("мир.пример", мир.пример);
-
- мир.пример(123);
- мир.вывести(77);
-
- console.debug("мир", мир);
-
- </script>
- </body>
- </html>
|