|
- <!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(п) {
- function вСтроку(ключ) {
- return `["${ключ}"]`;
- }
- return "мир" + п.map(вСтроку).join("") + " = ";
- };
- мир.создатьПуть = function(путь) {
- var уровень = мир;
- var длина = путь.length;
- for (var i = 0; i < длина; ++i)
- {
- var п = путь[i];
- if (!уровень[п])
- {
- уровень[п] = {};
- }
- else
- {
- уровень = уровень[п];
- }
- }
- };
- мир.разобрать = function(словарь, путь = []) {
- for (ключ in словарь)
- {
- var внутреннийПуть = путь.slice();
- внутреннийПуть.push(ключ);
- var значение = словарь[ключ];
- мир.создатьПуть(внутреннийПуть);
- if (typeof значение === "string")
- {
- // Функция.
- if (значение.startsWith("function"))
- {
- var содержимое = мир.строкаПути(внутреннийПуть) + значение;
- eval(содержимое);
- }
- // Строка.
- else
- {
- var содержимое = мир.строкаПути(внутреннийПуть) + '"' + значение + '"';
- eval(содержимое);
- }
- }
- /*
- // Массив.
- else if (Array.isArray(значение))
- {
- console.debug("разобрать массив");
- }
- */
- // Словарь.
- else if (значение === Object(значение))
- {
- мир.разобрать(значение, внутреннийПуть);
- }
- // Неизвестное.
- else
- {
- console.error("неизвестная пара ключ/значение", ключ, значение);
- }
- }
- };
-
- console.debug("строки отдельно", {строки: ["a", "b", "c"]});
-
- var json1 = {
- строки: [
- "abc",
- "def",
- "ghi",
- {
- ключ: "uuu",
- },
- ],
- вывести: function(аргумент) {
- console.debug('выводим аргумент:', аргумент);
- }.toString(),
- пример: function(аргумент) {
- мир.вывести("уга");
- console.debug("функция-пример исполнена. аргумент:", аргумент);
- }.toString(),
- набор: {
- проба: function() {
- console.debug("это проба");
- }.toString(),
- простоСтрока: "уппамам",
- глубже: {
- ещё: {
- функция9на12: function(аргумент) {
- console.debug("функция9на12", аргумент);
- }.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>
|