Существует предыдущий вопрос (here), однако ответы там точно не отвечают на мой вопрос - принятый ответ содержит недействительный JSON (обязательный для использования eval()
) что, насколько мне известно, просто невозможно сделать даже что-то подобное.Функции анализа, хранящиеся в виде строк в объектном литерале/синтаксис JSON и различающийся
Я планирую использовать код с моего собственного сервера, который хранится в виде строкового литерала в строке, однако мне также хотелось бы хранить функции там.
В настоящее время, я думал о следующих возможностях:
- Просто используйте
eval()
для разбора строки - Плейс функции в виде строки (с чем-то вроде
"\bfunction"
, чтобы быть в состоянии идентифицировать их), бегJSON.parse()
на него, а затем использовать для в цикле, чтобы увидеть нужно ли такие функции, которые будут анализироваться (вероятно, довольно медленно) - используйте DOM для запуска кода с использованием
<script>
тег и просто запустить его там
Этот код не содержит ничего, что должно быть доступно для редактирования, однако я не уверен, будет ли еще проблема безопасности или просто скорость. Будет ли использовать eval()
для моей ситуации, и есть ли более эффективный способ сделать это, чем синтаксический анализ для функций вручную или с помощью eval()
?
EDIT: будет ли альтернативный синтаксис для синтаксиса лучше или это просто сделает вещи еще более сложными?
EDIT2: Я ищу, просто сделать что-то вроде следующего:
{ "test": function() {}
, "foo": 1
, "bar": 2 }
Я не ищет просто разобрать целую функцию из строки, например
eval('function(){}');
использовать параметр reviver для JSON.parse и попробовать {} найти функции внутри. с другой стороны, если все данные поступают от вас, eval() абсолютно безопасен в использовании, и почти все, что вы можете сделать с помощью eval(), вы можете сделать с помощью функции(). – dandavis
Для чего вам нужны функции? Не можете ли вы просто создать общую функцию (фабрику) и отправить только JSONifiable параметры для этого? – Bergi
@Bergi: Я бы хотел гибко определить пользовательские функции, некоторые из которых нужно добавить просто для возможностей, добавленных через JSON. –