138 lines
5.1 KiB
HTML
138 lines
5.1 KiB
HTML
<!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>
|