JSON Parse与JSON格式的字符串无法正常工作

时间:2017-11-23 17:13:13

标签: javascript python html json google-maps

我在使用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}

0 个答案:

没有答案