代码之家  ›  专栏  ›  技术社区  ›  Nikko

HTML/Chart JS从Python中反序列化JSON

  •  1
  • Nikko  · 技术社区  · 6 年前

    {'datasets': [{'label': 'Door_08', 'data': [{'x': Timestamp('2018-10-23 00:22:43'), 'description': 'Stats: PSN:17019 PNR:0 PER:0 BFL:0 MID:17365 UER:0 WSC:1 NCL:0 NIN:0 NWI:0 WCC:1 CCC:1 LRS:-65 RLC:1145256517', 'y': 1}, ...
    

    但是,时间戳有一些问题。因此,我通过将对象转换为JSON来处理它,从 this answer

    现在看来:

    {"datasets": [{"label": "Door_08", "data": [{"x": "2018-10-23 00:22:43", "description": "Stats: PSN:17019 PNR:0 PER:0 BFL:0 MID:17365 UER:0 WSC:1 NCL:0 NIN:0 NWI:0 WCC:1 CCC:1 LRS:-65 RLC:1145256517", "y": 1}, ...
    

    然而,我仍然无法看到我的图表。检查页面:

    var ctx = document.getElementById("myChart").getContext('2d');
    var myChart = new Chart(ctx, {
        type: 'line',
        data: "{"datasets": [{"label": "Door_08", "data": [{"x": "2018-10-23 00:22:43", "description": "Stats: PSN:17019 PNR:0 PER:0 BFL:0 MID:17365 UER:0 WSC:1 NCL:0 NIN:0 NWI:0 WCC:1 CCC:1 LRS:-65 RLC:1145256517", "y": 1}, 
    

    所以我猜它没有被正确解码?

    我就是这样得到这个物体的:

    var ctx = document.getElementById("myChart").getContext('2d');
    var myChart = new Chart(ctx, {
        type: 'line',
        data: "{{ object_returned }}",
    

    我的角色:

    <!DOCTYPE html>
    <html lang="en">
    <head>
      <meta charset="utf-8" />
      <title>{{ title }}</title>
      <link href="https://stackpath.bootstrapcdn.com/bootstrap/4.1.3/css/bootstrap.min.css" rel="stylesheet">
      <script src="https://cdnjs.cloudflare.com/ajax/libs/Chart.js/2.7.2/Chart.bundle.min.js"></script>
      <script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.13.0/moment.min.js"></script>
    </head>
    

    我的烧瓶后端:

    @app.route('/logs', methods=['GET', 'POST'])
    def eventlogs():
        # Do something
        return render_template('logs.html', error=error, form=form, object_returned=object_returned)
    

    如何正确地反序列化对象?

    2 回复  |  直到 6 年前
        1
  •  2
  •   jordiburgos    6 年前

    将tojson过滤器应用于 object_returned :

    var myChart = new Chart(ctx, {
        type: 'line',
        data: "{{ object_returned|tojson|safe }}",
        ...
    
        2
  •  0
  •   Nikko    6 年前

    python返回的数据是类类型“dict”,而不是json。

    通过以下方式使其成为HTML/Java中的json:

    var myVariable = {{ object_returned | tojson }};
    

    引号被删除,因为它使它成为一个字符串。

    最后:

    var ctx = document.getElementById("myChart").getContext('2d');
    var myChart = new Chart(ctx, {
        type: 'line',
        data: myVariable,