2014-09-03 35 views
1

我需要将高选项选项转换为JSON字符串。我真的很为此苦苦挣扎。Highcharts将字符串化JSON的选项

因为它有cuircual结构。

例子:http://jsfiddle.net/8TEKD/

嗯,我也试图与道格拉斯·克罗克福特cycle.js到decycle它:https://github.com/douglascrockford/JSON-js

如果我尝试decycle它,我得到这个堆栈跟踪

'Attr.ownerElement' is deprecated and has been removed from DOM4 (http://w3.org/tr/dom). cycle.js:92 
'Attr.textContent' is deprecated. Please use 'value' instead. cycle.js:92 
'Attr.nodeValue' is deprecated. Please use 'value' instead. cycle.js:92 
'HTMLHtmlElement.manifest' is deprecated. The manifest attribute only has an effect during the early stages of document load. cycle.js:92 
InvalidStateError: Failed to read the 'selectionDirection' property from 'HTMLInputElement': The input element's type ('checkbox') does not support selection. 

嗯,我需要这是因为我想要保存配置我的图表和稍后使用该配置加载它。

有没有办法做到这一点?

感谢

回答

3

的问题是,$('#container').highcharts(options);增加了renderTo元素的对象,它是一个DOM元素。在添加之前,您没有循环结构。而且,如果你真的想保存你的配置选项以便再次使用,保存它们渲染到的DOM元素对你来说并不合适。

我会建议保存JSON创建图表前:

$(function() { 
    var options = { 

     chart: { 
      marginRight: 120 
     }, 

     legend: { 
      align: 'right', 
      verticalAlign: 'top', 
      x: 0, 
      y: 100 
     }, 

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

     series: [{ 
      data: [29.9, 71.5, 106.4, 129.2, 144.0, 176.0, 135.6, 148.5, 216.4, 194.1, 95.6, 54.4] 
     }] 
    }; 
    jsonstring = JSON.stringify(options); 

    $('#container').highcharts(JSON.parse(jsonstring)); // just to prove it works, obviously you would use the options variable here 

}); 

http://jsfiddle.net/6y2gg6oy/

但是,如果这是不是一种选择,你可以使用JSON.stringifyreplacer选项排除部分你不想要的选项对象。 https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Using_native_JSON#The_replacer_parameter

+0

感谢您的好的答案,我想这就是我现在正在做的。那么在我的情况下,它更复杂一点,因为我试图建立一个更新和改变结果的动态图表。但是我已经定义了一些更新我自己的配置的更新方法,然后将其转换为JSON,再次存储并加载。 – 2014-09-04 12:09:20