Я использую eval, который работает в одном веб-браузере, но не в другом (это не ваши стандартные браузеры, а интегрированные с другим приложением).В одном мой объект из 300+ предметов обрабатывается правильно.В операторе он обрабатывает элементы от 256 до конца, но пропускает первые 255!JSON также верен.Есть ли альтернативы eval?возможно, функция jsonToObject.Сейчас я пишу свои собственные, но сейчас у меня серьезные временные ограничения, и я надеялся, что мне не пришлось изобретать велосипед.
Какие-нибудь идеи или функции?
Очень ценится
Пока у меня есть это, я собирался попытаться основать его на обратной полировке.Не уверен, что это наиболее эффективно, но по некоторым причинам это казалось интересным испытанием.Часть меня сворачивается к давлению того времени, которое у меня есть, и поэтому мне нужно быть реалистичным и спросить, есть ли какие-либо методы, которые уже могут быть использованы со мной.
var operatorStack = new Array();
var variableStack = new Array();
var valueStack = new Array();
var objectStack = new Array();
object.prototype.toJSON = function(){
}
function json(str){
this.value = str
}
/*
({"0":"Zero","1":{"A":"1","B":"2"},"2":{"C":"3","D":"4"},"3":{"E":"5","F":"^"}})
*/
json.prototype.toObject = function(){
var str = this.value;
var vbl = "";
var vlu = "";
for(var i = 0; i < str.length; i++){
var chr = str.charAt(i);
switch(chr){
case '{': //new Object();
objectStack.push = new Object();
operatorStack.push(chr);
break;
case '}': //close Object();
operatorStack.pop();
if(operatorStack[operatorStack.length-1] == ':'){
objectStack[objectStack.length-2][vbl] = objectStack[objectStack.length-1];
}else{
return obj;
}
break;
case '"':
if(operatorStack[operatorStack.length-1] == '"'){
operatorStack.pop();
if(operatorStack[operatorStack.length-1] != ':'){
objectStack[objectStack.length-1][vbl] = val;
vbl = "";
val = "";
operatorStack.pop();
}else if(operatorStack[operatorStack.length-1] != ','){
operatorStack.pop();
}
}else{
operatorStack.push(chr);
}
break;
case ':':
operatorStack.push(chr);
break;
case ',':
operatorStack.push(chr);
break;
default:
if(operatorStack[operatorStack.length-1] == '"'){
switch(operatorStack[operatorStack.length-2]{
case '{': //we know it's a variable
vbl += chr;
break;
case ',': //we know it's a variable
vbl += chr;
break;
case ':': //we know it's a value
val += chr;
break;
}
}else{
alert("JSON not formed properly, alphanumerics not within quotes.")//JSON not formed properly
}
break;
}
}
return obj;
}
Спасибо