2010-10-24 25 views
10

Tengo una parte de un marco de depuración que necesita poder ejecutar objetos de evaluación de tiempo.javascript eval y evaluación de objeto

Específicamente, si tengo una cadena como esta "{a: 1, b:2}", debe evaluarla en un objeto con los miembros a y b con esos valores. Sin embargo, si lo hago eval("{a: 1, b:2}"), parece evaluarlo como una afirmación, y dice algo acerca de una etiqueta ilegal.

he cortado de modo que se evalúa como esto:

eval("var x=" + str + "; x;"); 

que parece funcionar, pero parece un horrible truco. ¿Alguna sugerencia sobre cómo hacer esto mejor?

(Por cierto, soy consciente de los peligros de eval, pero esto es parte de un marco de depuración que no será visto por los usuarios reales.)

+3

Ver: http://stackoverflow.com/questions/3360356/why-the-open-quote-and-bracket-for-eval-jsonstring-when-parsing-json – CMS

Respuesta

20

usted puede hacerlo usando () tener que analizarlo como un objeto, en lugar de una declaración, como esto:

eval("(" + str + ")"); 

embargo, usted debe utilizar JSON.parse() en primer lugar, si el navegador lo soporta.

+1

JSON.parse() no funcionará con los ejemplos descritos porque no son JSON válidos. Por ejemplo, JSON válido incluye todos los nombres de propiedad entre comillas dobles. – PleaseStand

+1

@idealmachine - sí, estás en lo correcto ... al mismo tiempo, yo diría que si pretendes usarlo como tal, ¿por qué * no * usas JSON válido en primer lugar? En este ejemplo, sí, el usuario debería ajustar su marcado de objeto. –

+0

O escriba una función para convertir la notación de objetos de JavaScript a JSON (por ejemplo, agregar citas). Eso es fácil de hacer. – cdiggins

Cuestiones relacionadas