You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

118 lines
4.4KB

  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
  5. <title>json</title>
  6. <style>
  7. html, body {
  8. margin: 0;
  9. padding: 0;
  10. overflow: hidden;
  11. }
  12. body {
  13. height: 100vh;
  14. width: 100vw;
  15. }
  16. </style>
  17. </head>
  18. <body>
  19. <script>
  20. var мир = {};
  21. мир.строкаПути = function(п) {
  22. function вСтроку(ключ) {
  23. return `["${ключ}"]`;
  24. }
  25. return "мир" + п.map(вСтроку).join("") + " = ";
  26. };
  27. мир.создатьПуть = function(путь) {
  28. var уровень = мир;
  29. var длина = путь.length;
  30. for (var i = 0; i < длина; ++i)
  31. {
  32. var п = путь[i];
  33. if (!уровень[п])
  34. {
  35. уровень[п] = {};
  36. };
  37. }
  38. };
  39. мир.разобрать = function(словарь, путь = []) {
  40. for (ключ in словарь)
  41. {
  42. var внутреннийПуть = путь.slice();
  43. внутреннийПуть.push(ключ);
  44. var значение = словарь[ключ];
  45. мир.создатьПуть(внутреннийПуть);
  46. if (typeof значение === "string")
  47. {
  48. // Функция.
  49. if (значение.startsWith("function"))
  50. {
  51. var содержимое = мир.строкаПути(внутреннийПуть) + значение;
  52. eval(содержимое);
  53. }
  54. // Строка.
  55. else
  56. {
  57. var содержимое = мир.строкаПути(внутреннийПуть) + '"' + значение + '"';
  58. eval(содержимое);
  59. }
  60. }
  61. // Вложенный объект/слоарь.
  62. else if (значение === Object(значение))
  63. {
  64. мир.разобрать(значение, внутреннийПуть);
  65. }
  66. // Неизвестное.
  67. else
  68. {
  69. console.error("неизвестная пара ключ/значение", ключ, значение);
  70. }
  71. }
  72. };
  73. var json1 = {};
  74. json1.вывести = function(аргумент) {
  75. console.debug('выводим аргумент:', аргумент);
  76. }.toString();
  77. json1.пример = function(аргумент) {
  78. мир.вывести("уга");
  79. console.debug("функция-пример исполнена. аргумент:", аргумент);
  80. }.toString();
  81. json1.набор = {
  82. проба: function() {
  83. console.debug("это проба");
  84. }.toString(),
  85. простоСтрока: "уппамам",
  86. глубже: {
  87. ещё: {
  88. /*
  89. функция9на12: function(аргумент) {
  90. console.debug("функция9на12", аргумент);
  91. }.toString(),
  92. опятьСтрока: "ого",
  93. */
  94. },
  95. },
  96. };
  97. json2 = JSON.stringify(json1);
  98. console.debug("2", json2);
  99. var json3 = JSON.parse(json2);
  100. console.debug("3", json3);
  101. мир.разобрать(json3);
  102. console.debug("мир.пример", мир.пример);
  103. мир.пример(123);
  104. мир.вывести(77);
  105. console.debug("мир", мир);
  106. </script>
  107. </body>
  108. </html>