JSON.parse(json) 它坏了

JSON.parse(json) it's is broken

抱歉我的英语不好。
我正在尝试使用 Morris.js, i'm using the line Chart and wanna make it with dynamic data, but when I will convert my array to a JsonString, it's broke my aplication, I already try some sollutions on internet like this 和 其他,但未成功

当我将数组转换为 Json 时,控制台显示:

VM13133:1 Uncaught SyntaxError: Unexpected end of JSONinput(…)
      executeMorrisGrafics @ 
      dashboard_1Mensal.controller.js:44initController @ 
      dashboard_1Mensal.controller.js:26(anonymous function) @ 
      dashboard_1Mensal.controller.js:16

我的代码是这样的

[...]
function executeMorrisGrafics(startDate, endDate){

  RequestService.getReturnMalingResult(startDate, endDate).then(function(data){

        var array = [];
        for(var i=0;i<data.listLineChartEmailSms.length;i++){
          array.push({ 
            y: data.listLineChartEmailSms[i.toString()].y, 
            a: data.listLineChartEmailSms[i.toString()].a, 
            b: data.listLineChartEmailSms[i.toString()].b 
          });
        }
        dataJson = array; //dataJson is a global Var
  });
  console.log(dataJson);//working until here
  var result = JSON.parse(dataJson.toString());//here is the problem

  Morris.Line({
    element: 'grafic-LineChart1',
    data: result,
    xkey: 'y',
    ykeys: ['a', 'b'],
    labels: ['Series A', 'Series B']
  });
[...]

谢谢

简单来说,JSON是一个对象的文本表示;对象是数据结构。

没有必要 JSON.parse() 已经是您程序中的对象的东西。

[…]
var result = dataJson;

Morris.Line({
    element: 'grafic-LineChart1',
    data: result,
    xkey: 'y',
    ykeys: ['a', 'b'],
    labels: ['Series A', 'Series B']
});

此外,就像@adeneo 提到的那样,dataJson 似乎是由 Promise 回调异步设置的,但是您使用 dataJson 的代码是同步的。

从关于line charts的Morris.js页面,数据参数被描述为

The data to plot. This is an array of objects, containing x and y attributes as described by the xkey and ykeys options.

所以在您的代码中您不需要使用 dataJson.toString() 函数。您的代码应如下所示。

[...]
function executeMorrisGrafics(startDate, endDate){

  RequestService.getReturnMalingResult(startDate, endDate).then(function(data){

        var array = [];
        for(var i=0;i<data.listLineChartEmailSms.length;i++){
          array.push({ 
            y: data.listLineChartEmailSms[i.toString()].y, 
            a: data.listLineChartEmailSms[i.toString()].a, 
            b: data.listLineChartEmailSms[i.toString()].b 
          });
        }
        dataJson = array; //dataJson is a global Var
  });
  console.log(dataJson);//working until here
  //var result = JSON.parse(dataJson.toString());//here is the problem

  Morris.Line({
    element: 'grafic-LineChart1',
    data: dataJson,
    xkey: 'y',
    ykeys: ['a', 'b'],
    labels: ['Series A', 'Series B']
  });
[...]

更详细的解释是 JSON 是用于 JavaScript 中的对象的字符串格式。但是您的代码没有做任何需要 JSON 的事情。请参阅 http://www.w3schools.com/js/js_json_intro.asp 了解 JSON 入门。