Разбор JSON для использования с Highcharts с использованием jquery .parseJSON или JSON.parse: как удалить кавычки из вызовов функций для средств форматирования?

Итак, у меня есть строка JSON, содержащая следующий фрагмент для форматирования метки оси в highcharts:

"labels":{"formatter":" function() { return Math.abs(this.value) + '%';}"

Когда строка преобразуется в объект javascript с помощью синтаксического анализатора json, свойство объекта для label.formatter представляет собой строку в кавычках с вызовом функции. Затем Highcharts жалуется, что средство форматирования — это не функция, а строка. Попытка выяснить, как удалить кавычки, чтобы это был фактический вызов функции, а не строка. Надеюсь, это имеет смысл. Заранее спасибо.

Это вся строка для справки:

"{"chart":{"animation":false,"backgroundColor":"rgba(255, 255, 255, 0.0)","type":"bar"},"credits":{"enabled":false},"xAxis":{"categories":["\u0027Alta \u0027","\u0027Gratr\u0027","\u0027IDV\u0027","\u0027BSV\u0027","\u0027Adhes\u0027"]},"yAxis":{"title":{"enabled":true},"labels":{"formatter":" function() { return Math.abs(this.value) + \u0027%\u0027; }"}},"legend":{"enabled":false},"exporting":{"enabled":false},"plotOptions":{"scatter":{"marker":{"radius":6}}},"series":[{"name":"\u0027Product\u0027","data":[{"y":69,"name":"\u0027() Alta All Cap Quality Growth\u0027"},{"y":17,"name":"\u0027() Gratry International Growth\u0027"},{"y":6,"name":"\u0027(IDV) iShares International Select Div ETF\u0027"},{"y":6,"name":"\u0027(BSV) Vanguard Short-Term Bond ETF\u0027"},{"y":2,"name":"\u0027() Adhesion Cash Model\u0027"}]}],"title":{"text":"Top 20 Allocations"}}"

person user789221    schedule 17.11.2017    source источник


Ответы (1)


Вы можете использовать eval(). Обратите внимание, что это брешь в системе безопасности.

Проблема в том, что вы передаете функцию через JSON. JSON не поддерживает это.

Кстати, jquery.parseJSON() устарел, используйте JSON.parse()

Вот пример:

data = JSON.parse(x);
data.yAxis.labels.formatter = eval(data.yAxis.labels.formatter);
person neuhaus    schedule 17.11.2017
comment
Нет, eval() в строке приведет к объекту функции, который вы можете передать в highcharts. - person neuhaus; 17.11.2017
comment
хорошо, поэтому data.yAxis.labels.formatter = function() { return Math.abs(this.value) + '%'; } При вызове chart.yAxis.labels.formatter = eval(chart.yAxis.labels.formatter) я получаю синтаксическую ошибку: Неожиданный токен ( - person user789221; 17.11.2017
comment
Пришлось заключить его в круглые скобки, так что eval( ( +formatter + ), и это, кажется, работает, спасибо - person user789221; 17.11.2017