为什么我不能用Javascript打开()和解析()这个JSON文件?

时间:2018-11-25 02:27:31

标签: javascript json django

我正在使用Django在Python中构建Web服务,我的任务之一是在项目中解析.json文件。

代码已编译,但是当我尝试访问json文件时,试图保存数据的var json_data变为空。

<head>
 <meta charset="UTF-8">
 <title>Network Graph3</title>
 <link rel="stylesheet" href="{% static 'css/style.css' %}">


 <script>
  // import json;
  window.onload = function () {
   var arr = [];
   var json_data = open("{% static 'static/json/graphData.json' %}");

   var obj = JSON.parse(json_data);
   var i;
   console.log(json_data)
   if (obj == null){
     return
   }
   for (i = 0; i < obj.documents; i++){
     point = obj.documents[i];
     arr[point.id].y = point.score;
   }
   var chart = new CanvasJS.Chart("chartContainer", {
     animationEnabled: true,
     theme: "light2",
     title:{
         text: "Dialog Sentiment Analysis"
     },
     axisY:{
         includeZero: false
     },
     data: [{
         type: "line",
         dataPoints: arr
         // [
         //     { y: 450 },
         //     { y: 414},
         //     { y: 520, indexLabel: "highest",markerColor: "red", markerType: "triangle" },
         //     { y: 460 },
         //     { y: 450 },
         //     { y: 500 },
         //     { y: 480 },
         //     { y: 480 },
         //     { y: 410 , indexLabel: "lowest",markerColor: "DarkSlateGrey", markerType: "cross" },
         //     { y: 500 },
         //     { y: 480 },
         //     { y: 510 }
         // ]
     }]
   });
   chart.render();

 }
</script>

</head>

示例json数据如下:

{"documents": [{"id": "0", "score": 0.8365770578384399},
            {"id": "2", "score": 0.9896875619888306},
            {"id": "3", "score": 0.5},
            {"id": "4", "score": 0.5},
            {"id": "6", "score": 0.12722820043563843},
            {"id": "7", "score": 0.16494140028953552},
            {"id": "8", "score": 0.7551238536834717},
            {"id": "9", "score": 0.12901419401168823},
            {"id": "10", "score": 0.5},
            {"id": "11", "score": 0.7559014558792114},

file structure

2 个答案:

答案 0 :(得分:0)

这里有很多问题...
我假设您的代码应调用open() python函数,在这种情况下,您将无法从javascript上下文调用它,因为它将被评估为window.open()(与python无关)比python函数。

因此,您要做的就是从view中读取json文件,并以序列化的json字符串的形式返回模板上下文,如下所示:

from django.shortcuts import render

def my_view(request):
    context = {"data": None}

    with open('data.json') as f:
        context['data'] = json.load(f)


    return render(request, 'templates/my_template.html', context)

现在只需使用JSON.parse()。 如果您使用的是jQuery或类似的库或AJAX,则另一种选择是依靠$.getJSON(),通过HTTP从服务器获取json数据(要求json文件具有通过HTTP的公共访问权限)。

答案 1 :(得分:0)

javascript open()中的

用于在新标签页/窗口中打开URL而不读取内容,请使用XMLHttpRequest()或jQuery $.ajax() / .getJSON()。还是您想做python open()吗?

JavaScript代码

window.onload = function() {
  var xhr = new XMLHttpRequest();
  xhr.onreadystatechange = function() {
    if (xhr.readyState == XMLHttpRequest.DONE) {
      // proccess json here
      readJson(xhr.responseText);
    }
  }
  xhr.open('GET', "/'static/json/graphData.json=", true);
  xhr.send(null);
}

function readJson(json_data) {
  var arr = [];
  var obj = JSON.parse(json_data);
  var i;
  console.log(json_data)
  ....
  ....
}