在JavaScript中从本地JSON文件读取时出错

时间:2013-10-29 20:57:19

标签: javascript json

我是JavaScript新手。我的JavaScript(script.js)从JSON文件中读取,如下所示。该脚本在不使用JQuery的情况下读取。我关注THIS网站以供参考。

function readJSON() {
  var LatLongData = JSON.parse(data);
  var LatLng1 = new google.maps.LatLng(LatLongData[0]);
}

JSON文件(data.json),存储在与JavaScript相同的位置,如下所示:

{ "data": 
[
    {"latitude" : "40.10246648", "longitude" : "-83.14877599"}
]
} 

html文件如下所示:

<script type="text/javascript" src="data.json"></script>
<script type="text/javascript" src="script.js"></script>
<script type="text/javascript" src="https://maps.googleapis.com/maps/api/js?key=MyKey&sensor=true"></script>
<body onload="readJSON()">
  <div id="map-canvas"/>
</body>

我在JSON文件格式上得到2个错误(在chrome和Firebug中都有)。但是,我在线验证(http://jsonlint.com/)JSON文件格式正确。我得到的错误是:

SyntaxError: missing ; before statement { "data":

ReferenceError: data is not defined  ---> var LatLongData = JSON.parse(data);

我在这里做错了什么?

2 个答案:

答案 0 :(得分:3)

你不能那样读json。首先,你不应该通过&lt; script&gt;来包含它。标签。你需要通过ajax请求获取json。我建议检查jQuery的getJSON方法:

$.getJSON( "data.json", function( data ) {
   // now you can read the data
   var LatLongData = data;
   var LatLng1 = new google.maps.LatLng(LatLongData[0]);
});

您正在做的是将json包含为javascript文件。这就是你得到那个错误的原因。其次, readJSON 使用实际上从未定义的数据变量。

答案 1 :(得分:1)

你包括了这个Json

{ "data": 
[
    {"latitude" : "40.10246648", "longitude" : "-83.14877599"}
]
} 

但代码期望变量称为数据, 如果你注意他们的“json”文件中的链接中的例子他们是“作弊”,那么它不是纯粹的JSON,因为它声明了一个包含字符串的全局变量。那个字符串是json。 因此,如果你继续这些练习,你应该有一个“json”文件。

var data = '[ {"latitude" : "40.10246648", "longitude" : "-83.14877599"}]'

但我建议你按照Krasimir的回答。