Вам нужно будет использовать функцию eval()
( doc ). У многих людей есть много чувств к этой функции. JSON лучше всего подходит для передачи данных, а не функций (см. JSON ). Функции должны лежать в сценарии на странице.
Также есть синтаксическая ошибка в вашем размещенном коде (функция заключена в одинарные кавычки ('), как и первый параметр console.log).
Но ...
json = "{\"run\":\"function() { console.log('running...'); }\"}"; //Fixed, thanks
obj = JSON.parse(json);
eval(obj.run); //Logs "running..."
Обновление:
О, и я ошибся. Eval, похоже, не любит анонимные функции. С исправленным кодом он будет анализировать json в объект со свойством run, равным String
, со значением "function() { console.log('running...'); }"
. Но когда вы eval(obj.run);
, вы получите ошибку SyntaxError, объявляющую неожиданное (. Предположительно, это (в функции ().
Итак, я могу придумать два способа справиться с этим:
- Удалите анонимную функцию из вашей фактической строки JSON (так, чтобы ваш PHP забыл о
function () {
), и оцените ее. Это означает, что он будет вызван, как только вы eval
это.
То, что я думаю, вы хотите, чтобы иметь возможность оценить его анонимной функцией, которая будет вызываться, когда вы хотите. Таким образом, вы могли бы написать функцию-обертку (вам также нужно будет выполнить опцию 1):
function returnEval(str) {
return function () { eval(str); }
}
Это позволит вам позвонить. Итак:
obj = JSON.parse(json);
obj.run = returnEval(obj.run);
obj.run(); //Logs "running..."
Надеюсь, это поможет!