Есть ли способ получить доступ / консоль к элементу в json?

#javascript #json #amcharts

#javascript #json #amcharts

Вопрос:

Я пытаюсь получить доступ к общей сумме, как показано на диаграмме, с помощью console.log, но я не могу, как я могу получить доступ к этой строке "periodValueText": "Total: [[value.sum]]" Я пытался настроить ее с помощью "var item":"[[value.sum]]" , но это не сработало, пожалуйста, любая помощь

 var chartData1 = [];

generateChartData();

function generateChartData() {
  var firstDate = new Date();
  firstDate.setDate(firstDate.getDate() - 500);
  firstDate.setHours(0, 0, 0, 0);

  for (var i = 0; i < 500; i  ) {
    var newDate = new Date(firstDate);
    newDate.setDate(newDate.getDate()   i);

    var a1 = Math.round(Math.random() * (40   i))   100   i;
    var b1 = Math.round(Math.random() * (1000   i))   500   i * 2;


    chartData1.push({
      "date": newDate,
      "value": a1,
      "volume": b1
    });
  }
}

var chart = AmCharts.makeChart("chartdiv", {
  "type": "stock",
  "extendToFullPeriod": false,

  "dataSets": [{
      "fieldMappings": [{
        "fromField": "value",
        "toField": "value"
      }, {
        "fromField": "volume",
        "toField": "volume"
      }],
      "dataProvider": chartData1,
      "categoryField": "date"
    }
  ],

  "panels": [{

      "showCategoryAxis": false,
      "stockGraphs": [{
        "id": "g1",

        "valueField": "value",
        "comparable": true,

      }],

      "stockLegend": {
        "periodValueText": "Total: [[value.sum]]"
      }
    }
  ],

  "periodSelector": {
    "position": "left",
    "periods": []
  },

  "dataSetSelector": {
    "position": "left"
  }
});

chart.addListener('rendered', function(event) {
  var dataProvider = chart.dataSets[0].dataProvider;
  $(".amChartsPeriodSelector .amChartsInputField").datepicker({
    "dateFormat": "dd-mm-yy",
    "minDate": dataProvider[0].date,
    "maxDate": dataProvider[dataProvider.length - 1].date,
    "onClose": function() {
      $(".amChartsPeriodSelector .amChartsInputField").trigger('blur');
    }
  });
});  
 html, body {
  width: 100%;
  height: 100%;
  margin: 0px;
  font-family: Verdana;
}

#chartdiv {
	width: 100%;
	height: 100%;
}  
 <!-- jQuery stuff -->
<link rel="stylesheet" media="all" href="https://code.jquery.com/ui/1.12.0/themes/ui-lightness/jquery-ui.css" />
<script src="https://code.jquery.com/jquery-2.2.4.min.js" integrity="sha256-BbhdlvQf/xTY9gja0Dq3HiwQF8LaCRTXxZKRutelT44=" crossorigin="anonymous"></script>
<script src="https://code.jquery.com/ui/1.12.0/jquery-ui.min.js" integrity="sha256-eGE6blurk5sHj rmkfsGYeKyZx3M4bG ZlFyA7Kns7E=" crossorigin="anonymous"></script>

<!-- amCharts -->
<script src="https://www.amcharts.com/lib/3/amcharts.js"></script>
<script src="https://www.amcharts.com/lib/3/serial.js"></script>
<script src="https://www.amcharts.com/lib/3/amstock.js"></script>
<div id="chartdiv"></div>  

Ответ №1:

 var data = {
  "type": "stock",
  "extendToFullPeriod": false,

  "dataSets": [{
      "fieldMappings": [{
        "fromField": "value",
        "toField": "value"
      }, {
        "fromField": "volume",
        "toField": "volume"
      }],
      "dataProvider": chartData1,
      "categoryField": "date"
    }
  ],

  "panels": [{

      "showCategoryAxis": false,
      "stockGraphs": [{
        "id": "g1",

        "valueField": "value",
        "comparable": true,

      }],

      "stockLegend": {
        "periodValueText": "Total: [[value.sum]]"
      }
    }
  ],

  "periodSelector": {
    "position": "left",
    "periods": []
  },

  "dataSetSelector": {
    "position": "left"
  }
};

var chart = AmCharts.makeChart("chartdiv", data);

console.log(data.panels[0].stockLegend.periodValueText);
// "Total: [[value.sum]]"
  

Ответ №2:

Вам нужно сохранить весь JSON в переменной, прежде чем вы сможете получить доступ к полю:

 var data = {
  "type": "stock",
  "extendToFullPeriod": false,

  "dataSets": [{
      "fieldMappings": [{
        "fromField": "value",
        "toField": "value"
      }, {
        "fromField": "volume",
        "toField": "volume"
      }],
      "dataProvider": chartData1,
      "categoryField": "date"
    }
  ],

  "panels": [{

      "showCategoryAxis": false,
      "stockGraphs": [{
        "id": "g1",

        "valueField": "value",
        "comparable": true,

      }],

      "stockLegend": {
        "periodValueText": "Total: [[value.sum]]"
      }
    }
  ],

  "periodSelector": {
    "position": "left",
    "periods": []
  },

  "dataSetSelector": {
    "position": "left"
  }
};

var chart = AmCharts.makeChart("chartdiv", data);

console.log(data.panels[0].stockLegend.periodValueText);
// "Total: [[value.sum]]"
  

ПРИМЕЧАНИЕ: [[value.sum]] в этом коде не будет расширяться, это будет буквальный текст внутри строки. Не уверен, что это должно быть.