使用js解析JSON字符串
var index = 0;
function parseItem(str) {
let re = null;
if (str[index] == "," || str[index] == ":") {
index++;
}
if (str[index] == "[") {
re = parseArray(str);
} else if (str[index] == "{") {
re = parseObject(str);
} else {
re = parseValue(str);
}
return re;
}
function parseObject(str) {
index++;
let re = {};
while (index < str.length) {
if (str[index] == "}") {
index++;
break;
} else {
re[parseItem(str)] = parseItem(str);
}
}
return re;
}
function parseArray(str) {
index++;
let re = [];
while (index < str.length) {
if (str[index] == "]") {
index++;
break;
} else {
re.push(parseItem(str));
}
}
return re;
}
function parseNumber(target) {
if (!isNaN(target)) {
return Number(target);
} else {
return target;
}
}
function parseBoolean(target) {
if (target == "true") {
return true;
}
if (target == "false") {
return false;
}
return target;
}
function parseNull(target) {
if (target === "null") {
return null;
}
return target;
}
function parseValue(str) {
let re = "";
while (index < str.length) {
if (jugde(str[index])) {
break;
} else {
re += str[index] == '"' ? "" : str[index];
index++;
}
}
return parseTarget(re);
}
function parseTarget(target) {
target = parseNumber(target);
target = parseNull(target);
target = parseBoolean(target);
return target;
}
function jugde(char) {
return (
char == "," ||
char == "[" ||
char == "{" ||
char == "]" ||
char == "}" ||
char == ":"
);
}
var jsonText ='[111,222e100,{"a":3},{"b":true,"c":"fooobar","d":[1,false,[null,4,{"x":1,"y":2}]]}]';