Files
json/index.html

151 lines
5.8 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<!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>