вы не можете иметь функции в JSON - в JSON значения могут быть только ... объект, массив, строка, число, ноль, истина или ложь
это не значит, что вы хотите делатьнедостижимо - вам нужно просто мыслить нестандартно ... например, на сервере отправьте {"callback": "fn1"} ... в клиенте, обработайте проанализированный JSON (то есть объект javascript, который вытеперь есть) и ищите ключ обратного вызова и, соответственно, изменяйте значение ... "fn1" для функции (.... и т. д.
, поэтому, если вы измените свой код сервера, чтобы отправить что-то вроде
{
"type": "line",
"data": {
"datasets": [
]
},
"options": {
"scales": {
"xAxes": [{
"type": "logarithmic",
"position": "bottom",
"ticks": {
"beginAtZero": false,
"min": 0.0,
"max": "NaN",
"stepSize": "NaN",
"callback": "fn1"
},
}
],
"yAxes": [{
"type": "logarithmic",
"position": "left",
"ticks": {
"beginAtZero": false,
"min": 0.0,
"max": "NaN",
"stepSize": "NaN",
"callback": "fn1arrow"
},
}
]
},
}
}
Затем вы можете написать такую функцию, как
function fixCallbacks(obj) {
const fns = {
fn1: function(value, index, values) { return Number(value.toString());},
fn1arrow: (value, index, values) => Number(value.toString()),
};
Object.entries(obj).forEach(([k, v]) => {
if (typeof v === 'object' || typeof v === 'array') {
fixCallbacks(v);
} else if (k === 'callback') {
obj[k] = fns[v] || obj[k];
}
});
}
Примечание: fn1 и fn1arrow делают одно и то же, просто показывая, что вы можете использовать функции и функции стрелок в качестве решения
Иэто должно работать - вот так
const data = {
"type": "line",
"data": {
"datasets": [
]
},
"options": {
"scales": {
"xAxes": [{
"type": "logarithmic",
"position": "bottom",
"ticks": {
"beginAtZero": false,
"min": 0.0,
"max": "NaN",
"stepSize": "NaN",
"callback": "fn1"
},
}
],
"yAxes": [{
"type": "logarithmic",
"position": "left",
"ticks": {
"beginAtZero": false,
"min": 0.0,
"max": "NaN",
"stepSize": "NaN",
"callback": "fn1arrow"
},
}
]
},
}
};
function fixCallbacks(obj) {
const fns = {
fn1: function(value, index, values) { return Number(value.toString());},
fn1arrow: (value, index, values) => Number(value.toString()),
};
Object.entries(obj).forEach(([k, v]) => {
if (typeof v === 'object' || typeof v === 'array') {
fixCallbacks(v);
} else if (k === 'callback') {
obj[k] = fns[v] || obj[k];
}
});
}
// here we "fix" the data
fixCallbacks(data);
//
console.log(data);