JSON.parse(json)它被打破了

时间:2016-11-03 21:20:40

标签: javascript arrays json morris.js

Sory我的英语不好 我正在尝试使用Morris.js制作一个grafic,我正在使用折线图并想用动态数据制作它,但是当我将我的数组转换为JsonString时,它已经破坏了我的应用,我已经尝试了一些解决方法在互联网上,如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']
  });
[...]

谢谢

2 个答案:

答案 0 :(得分:1)

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

  

要绘制的数据。这是一个对象数组,包含x和y属性,如xkey和ykeys选项所述。

因此,在您的代码中,您不需要使用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的事情。有关JSON入门,请参阅http://www.w3schools.com/js/js_json_intro.asp

答案 1 :(得分:0)

简单来说,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的代码是同步的。