我正在使用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},
答案 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)
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)
....
....
}