首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >高级图表中的JSON解析

高级图表中的JSON解析
EN

Stack Overflow用户
提问于 2017-04-28 12:52:36
回答 3查看 149关注 0票数 0

我在这里创建了这个处理静态数据的片段:

代码语言:javascript
复制
Highcharts.chart("container", {
  title: {
    text: "Highcharts pie chart"
  },

  xAxis: {
    categories: [
      "Jan",
      "Feb",
      "Mar",
      "Apr",
      "May",
      "Jun",
      "Jul",
      "Aug",
      "Sep",
      "Oct",
      "Nov",
      "Dec"
    ]
  },

  series: [
    {
      type: "pie",
      allowPointSelect: true,
      keys: ["name", "y", "selected", "sliced"],
      data: [
        ["January", 105],
        ["February", 400],
        ["March",230]
      ],
      showInLegend: true
    }
  ]
});
代码语言:javascript
复制
@import "https://code.highcharts.com/5/css/highcharts.css";
.highcharts-series .highcharts-point-select {
  fill: #fff;
  stroke: #f00;
  stroke-dasharray: 10;
}
代码语言:javascript
复制
<script src="https://code.highcharts.com/5/js/highcharts.js"></script>
<div id="container"></div>

现在,我正在尝试解析来自JSON查询的数据。JSON的格式如下:

代码语言:javascript
复制
{"headers":["Month","Clicks"],"rows":[["January",105],["February",400],["March",230]]}

因此,目前工作的片段中的JSON格式是:

代码语言:javascript
复制
["January", 105],
["February", 400],
["March",230]

我尝试使用在示例中使用的解决方案。在这种情况下,我不能正确地解析数据。在下面的新片段中,我在JS框的开头添加了一个JS脚本来解析JSON数据。

代码语言:javascript
复制
var unformatted = {"headers":["Month","impressions"],"rows":[["January",124010],["February",545010]]};

var data2 = [];

for (var i = 0; i < unformatted.rows.length; i++) {
    var row = unformatted.rows[i];
    
    data2.push({
        Month: row[0],
        Clicks: row[1]
    });
}

Highcharts.chart("container", {
  title: {
    text: "Clicks per Month"
  },

  xAxis: {
    categories: [
      "Jan",
      "Feb",
      "Mar",
      "Apr",
      "May",
      "Jun",
      "Jul",
      "Aug",
      "Sep",
      "Oct",
      "Nov",
      "Dec"
    ]
  },

  series: [
    {
      type: "pie",
      allowPointSelect: true,
      keys: ["name", "y", "selected", "sliced"],
      data: data2
      ,
      showInLegend: true
    }
  ]
});
代码语言:javascript
复制
@import "https://code.highcharts.com/5/css/highcharts.css";
.highcharts-series .highcharts-point-select {
  fill: #fff;
  stroke: #f00;
  stroke-dasharray: 10;
}
代码语言:javascript
复制
<script src="https://code.highcharts.com/5/js/highcharts.js"></script>
<div id="container"></div>

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2017-04-28 12:58:11

您需要访问第一行,然后从数组中的每个项获取数据。

代码语言:javascript
复制
categories: unformatted.rows[0].map(record => record[0])

数据只是行。

代码语言:javascript
复制
data: unformatted.rows

代码语言:javascript
复制
// Return unique array of items.
const unique = list => [...new Set(list)];

var unformatted = {
  "headers": ["Month", "impressions"],
  "rows": [
    ["January", 124010],
    ["February", 545010]
  ]
};

Highcharts.chart("container", {
  title: {
    text: "Clicks per Month"
  },
  xAxis: {
    categories: unique(unformatted.rows[0].map(record => record[0]))
  },
  series: [{
    type: "pie",
    allowPointSelect: true,
    keys: ["name", "y", "selected", "sliced"],
    data: unformatted.rows,
    showInLegend: true
  }]
});
代码语言:javascript
复制
@import "https://code.highcharts.com/5/css/highcharts.css";
.highcharts-series .highcharts-point-select {
  fill: #fff;
  stroke: #f00;
  stroke-dasharray: 10;
}
代码语言:javascript
复制
<script src="https://code.highcharts.com/5/js/highcharts.js"></script>
<div id="container"></div>

票数 1
EN

Stack Overflow用户

发布于 2017-04-28 12:56:56

如果"rows"包含您的数据,为什么不让您的series.data成为"rows"元素,而不是循环使用JSON。所以你会有这个:

代码语言:javascript
复制
var unformatted = {"headers":["Month","impressions"],"rows":[["January",124010],["February",545010]]};

var data2 = [];
//console.log(unformatted.rows);
data2 = unformatted.rows;
票数 1
EN

Stack Overflow用户

发布于 2017-04-28 12:58:04

您的错误是使用 part 2.推送部件

代码语言:javascript
复制
// instead
data2.push({
    Month: row[0],
    Clicks: row[1]
});

//you should do 
data2.push([row[0], row[1]]);

以下是的固定版本--您的代码

代码语言:javascript
复制
var unformatted = {"headers":["Month","impressions"],"rows":[["January",124010],["February",545010]]};

var data2 = [];

for (var i = 0; i < unformatted.rows.length; i++) {
    var row = unformatted.rows[i];
    
    data2.push([row[0], row[1]]);

}

Highcharts.chart("container", {
  title: {
    text: "Clicks per Month"
  },

  xAxis: {
    categories: [
      "Jan",
      "Feb",
      "Mar",
      "Apr",
      "May",
      "Jun",
      "Jul",
      "Aug",
      "Sep",
      "Oct",
      "Nov",
      "Dec"
    ]
  },

  series: [
    {
      type: "pie",
      allowPointSelect: true,
      keys: ["name", "y", "selected", "sliced"],
      data: data2,
      showInLegend: true
    }
  ]
});
代码语言:javascript
复制
@import "https://code.highcharts.com/5/css/highcharts.css";
.highcharts-series .highcharts-point-select {
  fill: #fff;
  stroke: #f00;
  stroke-dasharray: 10;
}
代码语言:javascript
复制
<script src="https://code.highcharts.com/5/js/highcharts.js"></script>
<div id="container"></div>

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43680740

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档