eval() 的替代品
Alternatives to eval()
我一直在使用 eval 它在一个网络浏览器中工作,但不能在另一个网络浏览器中工作(这些不是您的标准浏览器,而是与另一个应用程序集成的浏览器)。在一个我的300 +项目对象中,正确处理。在 opther 中,它处理从 256 到最后的项目,但跳过前 255 个!JSON 也是正确的。有没有其他选择吗?也许是一个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;
}
谢谢
https://github.com/douglascrockford/JSON-js
JSON.parse(text, reviver)
相关文章:
- 递归使用 eval() 是检查程序执行的好方法吗?
- 为什么忽略了eval()代码中的语法错误
- 推荐在JavaScript中执行存储为字符串的函数,而不是使用eval
- Javascript eval()无法处理传递的字符串
- 调用绕过eval()的函数
- Semi-sandboxing Javascript eval
- 轨道用RJS的替代品
- ES6 模板文字是否比 eval 更安全
- JavaScript 可以在这里使用 eval 吗?
- 如何使用uglifyjs/uglifyjs2解析walk和eval javascript表达式
- jqueryui的轻量级替代品,可在angular项目中选择
- 如何使用其他地方指定的访问信息访问嵌套的json对象,而不使用eval或迭代
- 当eval只执行服务器端数据时,在javascript中使用eval是否安全
- 使用eval()定义变量显示未定义的错误
- javascript eval方法语法
- 在Javascript中使用eval的替代方案
- angularjs两种功能的替代品(欧芹和重置)
- Eval vs execscript
- eval()读取函数参数有多糟糕
- eval() 的替代品