Процитируем одну из спецификаций - http://tools.ietf.org/html/rfc7159#section-12
В спецификации формата обмена данными JavaScript Object Notation (JSON) указано:
JSON - это подмножество JavaScript, но исключает назначение и вызов.
Поскольку синтаксис JSON заимствован из JavaScript, можно использовать функцию eval () этого языка для анализа текстов JSON. Обычно это представляет собой неприемлемую угрозу безопасности, поскольку текст
может содержать исполняемый код вместе с объявлениями данных . То же самое относится к использованию функций, подобных eval (), в любом другом языке программирования, в котором тексты JSON соответствуют
синтаксису этого языка.
Итак, все ответы, в которых говорится, что функции не являются частью стандарта JSON, верны.
Официальный ответ: нет, определять функции в результатах JSON недопустимо!
Ответ может быть положительным, потому что «код - это данные», а «данные - это код». Даже если JSON используется как формат сериализации данных, не зависящий от языка, туннелирование «кода» через другие типы будет работать.
Строка JSON может использоваться для передачи функции JS браузеру на стороне клиента для выполнения.
[{"data":[["1","2"],["3","4"]],"aFunction":"function(){return \"foo bar\";}"}]
Это приводит к вопросу типа: «Как выполнить код JavaScript, хранящийся в виде строки ».
Будьте готовы поднять ваш флаг «eval () is evil» и прикрепить рядом с ним флаг «не туннелировать функции через JSON».