Игнорирование функции в JSON с помощью JavaScript с использованием JSON.parse()

#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');