不使用eval执行JSON字符串的选项

时间:2014-02-11 19:20:53

标签: javascript json eval

我想看看我有哪些选项来执行一个字符串,它在不使用eval()的情况下在JSON中查找值。

我的JSON看起来像这样:

var caso = {
    "_id": "C1M3bqsB92i5SPDu",
    "type": "bpm",
    "bpm": {
        "_data": {
            "_id_bpm": "bpm_solicitud_viaticos"
        },
        "milestones": {
            "solicitud": {
                "toma_de_datos": {
                    "nombre": "RAUL MEDINA",
                    "clave": "123",
                    "departamento": "Finanzas",
                    "cantidad": "456"
                }
            }
        }
    }
}

现在,我是一个值为

的字符串
var step = "caso.bpm.milestones.solicitud.toma_de_datos.nombre";

我从这个JSON获得了我想要的价值:

var thevalue = eval(step);

哪个是我的选项而不是eval()?既高效又易于实施?

非常感谢你的帮助!

2 个答案:

答案 0 :(得分:0)

如果字符串始终采用该格式,则可以拆分并迭代它

var pieces = step.split('.');
var parent = window;

while(parent && pieces.length) {
    parent = parent[pieces.shift()];
}

if(parent && pieces.length === 0) {
    // parent is now the value
}

这是一个小提琴:http://jsfiddle.net/9ZjEt/

答案 1 :(得分:0)

var pieces = step.split('.'),
    result;

pieces.shift(); //discards superfluous "caso"
result = caso[pieces.shift()];

while (pieces.length >= 1) {
    result = result[pieces.shift()];
}