我在使用JSON.parse时遇到了问题。 app.py将3个JSON对象数组发送到index.html:state_latitude,state_longitude和state_name。
app.py
def index():
"""Render map"""
if not os.environ.get("API_KEY"):
raise RuntimeError("API_KEY not set")
state_latitude = db.execute("SELECT latitude FROM geo_states")
state_longitude = db.execute("SELECT longitude FROM geo_states")
state_name = db.execute("SELECT name FROM geo_states")
return render_template("index.html", key=os.environ.get("API_KEY"), state_latitude=json.dumps(state_latitude), state_longitude=json.dumps(state_longitude),
state_name=json.dumps(state_name))
index.html
index.html中的短脚本用于定义可由scripts.js访问的变量。它们仍然是由python脚本返回的相同的3个数组,但现在它们被格式化为字符串。例如,当我尝试将state_lats,state_longs和state_names定义为var state_lats = {{ state_latitude }}
时,我收到错误"解析错误:意外的令牌{"。如果我可以将这三个变量定义为JSON而不是字符串,那将是解决此问题的一种方法,但因为我无法弄清楚这一点。我尝试在scripts.js中将它们用作字符串。
...
<script type="text/javascript">
var state_latitudes = "{{ state_latitude }}"
var state_longitudes = "{{ state_longitude }}"
var state_names = "{{ state_name }}"
</script>
<script src="/static/scripts.js"></script>
scripts.js中
state_latitudelist(以及其他两个等效变量)是一个JSON格式的字符串数组,而不是一个包含多个JSON的长字符串。 state_latitudelist的值如下。我试图迭代这个数组并将每个元素转换为实际的JSON,以便我可以在稍后的脚本中将它们编入索引,但它似乎不起作用。我没有收到错误,但是当我尝试document.write(statelatitudeJSON)
时,该命令似乎被忽略,这表明statelatitudeJSON为空。有谁知道可能出现什么问题?谢谢你的帮助。
var state_latitudelist = [];
var value = "";
var addValue = false;
for (i = 0; i < state_latitudes.length; i++) {
if (state_latitudes[i] == '{') {
addValue = true;
}
if (state_latitudes[i] == '}') {
addValue = false;
value += state_latitudes[i];
state_latitudelist.push(value);
value = '';
}
if (addValue == true) {
value += state_latitudes[i];
}
}
var state_latitudeJSON = []
for (i = 0; i < 50; i++) {
state_latitudeJSON.push(JSON.parse(state_latitudelist[i]))
}
document.write(state_latitudelist)
返回
{"latitude": 32.806671},{"latitude": 61.370716},{"latitude": 33.729759},{"latitude": 34.969704},{"latitude": 36.116203},{"latitude": 39.059811},{"latitude": 41.597782},{"latitude": 39.318523},{"latitude": 38.897438},{"latitude": 27.766279},{"latitude": 33.040619},{"latitude": 21.094318},{"latitude": 44.240459},{"latitude": 40.349457},{"latitude": 39.849426},{"latitude": 42.011539},{"latitude": 38.5266},{"latitude": 37.66814},{"latitude": 31.169546},{"latitude": 44.693947},{"latitude": 39.063946},{"latitude": 42.230171},{"latitude": 43.326618},{"latitude": 45.694454},{"latitude": 32.741646},{"latitude": 38.456085},{"latitude": 46.921925},{"latitude": 41.12537},{"latitude": 38.313515},{"latitude": 43.452492},{"latitude": 40.298904},{"latitude": 34.840515},{"latitude": 42.165726},{"latitude": 35.630066},{"latitude": 47.528912},{"latitude": 40.388783},{"latitude": 35.565342},{"latitude": 44.572021},{"latitude": 40.590752},{"latitude": 41.680893},{"latitude": 33.856892},{"latitude": 44.299782},{"latitude": 35.747845},{"latitude": 31.054487},{"latitude": 40.150032},{"latitude": 44.045876},{"latitude": 37.769337},{"latitude": 47.400902},{"latitude": 38.491226},{"latitude": 44.268543},{"latitude": 42.755966}