Опираясь на ответ Фихаг, я только что придумал это.Это может быть началом для вас.
Он не поддерживает:
- Пробелы вне ключа / значения
- Любой из
,{}:"
в качестве ключа / значения - Массивы
- Нет обработки ошибок
- (Вероятно, больше - я не проверял это подробно)
Код:
var json = '{"a":{"b":"test"},"c":123,"d":{"nested":{"key":null}}}';
var split = function(str, delimiter, func) {
var res = [];
var before = 0;
for(var i = 0; i < str.length; i++) {
if(str[i] === delimiter) {
if(func(str, i) === true) {
res.push(str.substring(before, i));
before = i + 1;
}
}
}
res.push(str.substring(before));
return res;
};
var amountbefore = function(str, pos, character) {
var amount = 0;
for(var i = 0; i < pos; i++) {
if(str[i] === character) {
amount++;
}
}
return amount;
};
var parse = function(obj) {
var stripped = obj.slice(1, -1);
var splitted = split(stripped, ",", function(str, i) {
return amountbefore(str, i, "{") === amountbefore(str, i, "}");
});
var res = {};
if(stripped === "") return res;
for(var i = 0; i < splitted.length; i++) {
var spl = split(splitted[i], ":", function(str, i) {
return amountbefore(str, i, "{") === amountbefore(str, i, "}")
});
var val;
if(spl[1][0] === "n") val = null;
if(/^\d/.test(spl[1][0])) val = spl[1] - 0;
if(spl[1][0] === "\"") val = spl[1].slice(1, -1);
if(spl[1][0] === "{") val = parse(spl[1]);
res[spl[0].slice(1, -1)] = val;
}
return res;
};
parse(json); // parses the JSON string