#javascript #json
#javascript #json
Вопрос:
Я использую Highcharts для создания некоторых диаграмм, более конкретно я использую https://github.com/highcharts/node-export-server для того, чтобы экспортировать диаграммы. В качестве источника того, что будет содержать диаграмма, используется файл JSON (см. JSON ниже).
Затем я считываю данные из файла и хочу заменить свойство data в файле JSON на то, что я прочитал из файла, проблема у меня в том, что JSON содержит функцию (), поэтому, когда я использую JSON.parse(), происходит сбой, потому что JSON не может содержать функцию ().
{
"chart":{
"type":"bar",
"labels":{
"style":{
"fontFamily":"Arial",
"fontSize":"14px"}
},
"events": {
"load": function() {
var plotBands = this.xAxis[0].plotLinesAndBands;
for (var i in plotBands) {
var d = plotBands[i].svgElem.d;
var dArray = d.split(" ");
var rect = {x:25, y:dArray[5], width: 540, height: 100};
this.renderer.rect(rect.x, rect.y, rect.width, rect.height)
.attr({
fill: 'green'
})
.add();
}
}
}
},
"xAxis":{
"categories":[
{"name":"Group A","categories":["Text A.1","Text A.2","Text A.3"]},
{"name":"Group B","categories":["Text B.1","Text B.2","Text B.3"]},
{"name":"Group C","categories":["Text C.1","Text C.2","Text C.3"]},
{"name":"Group D","categories":["Text D.1","Text D.2","Text D.3"]},
{"name":"Group E","categories":["Text E.1","Text E.2","Text E.3"]},
{"name":"Group F","categories":["Text F.1","Text F.2","Text F.3"]},
{"name":"Group G","categories":["Text G.1","Text G.2","Text G.3"]}],
"labels":{
"rotation":0,
"style":{
"fontFamily":"Arial",
"fontSize":"14px",
"overflow":"justify",
"textOverflow":"none"
}
}
},
"yAxis":{
"min":0,
"max":100,
"title":{"text":"y-values"},
"style":{
"fontSize":"14px",
"overflow":"justify"
}
},
"series":[{
"type":"bar",
"name":"Score",
"data":[20,20,43,80,20,10,65,88,35,62,48,85,63,20,13,54,34,100,23,55,76],
"color":"red"
}]
}
Это строка кода, которая завершается ошибкой
var m = JSON.parse(fs.readFileSync('jsonFile.json', 'utf-8'));
Есть ли способ обойти эту проблему? Могу ли я каким-либо образом игнорировать функцию, потому что мне все равно не интересно читать ее содержимое? Заранее спасибо!
Комментарии:
1. Почему
jsonFile.json
содержит функцию? Вы должны устранить проблему в ее источнике, и это должно заключаться в том, чтобы гарантировать, чтоjsonFile.json
содержит только допустимые данные.2. Вы можете использовать
eval
,var m = eval("(" fs.readFileSync('jsonFile.json', 'utf-8') ")");
3. @ponury-kostek, ваш код выдаст ошибку.
4. @Qwertiy правильно, исправлено
5. Вы могли бы создать свою собственную функцию, которая принимает строку данных диаграммы и возвращает допустимый JSON.
Ответ №1:
Если файл является надежным, вы можете использовать eval
:
var m = (0, eval)("(" fs.readFileSync('jsonFile.json', 'utf-8') ")");
В любом случае, я не рекомендую вам это делать.
Вам следует либо удалить функцию и создать допустимый json, либо изменить файл на js
, добавить module.exports =
туда и затем использовать для него обычный require
:
var m = require('jsonFile.js');