2

我正在尝试使用 jQuery 读取 JSON 文件:

       var listOfItems;
       $(function() {
            $.getJSON('myData.json', function(data) {
                listOfItems = data.items;
            });
        });

这是 myData.json:

{
    {"source": "Microsoft", "target": "Amazon", "type": "licensing"},
    {"source": "Microsoft", "target": "HTC", "type": "licensing"},
    {"source": "Samsung", "target": "Apple", "type": "suit"},
    {"source": "Motorola", "target": "Apple", "type": "suit"}
}

但是,Chrome Web 开发人员指出,listOfItems此代码后未定义。为什么?我确信 javascript、HTML 和 JSON 文件都位于同一个目录中。

4

5 回答 5

2

修复 JSON。jsonlint会告诉你出了什么问题。

JSON 中的属性名称是字符串(与 JavaScript 不同,它们可能是标识符),因此必须用引号括起来。

于 2012-04-06T19:55:05.977 回答
1

您的主要问题是您使用“{”而不是“[”作为包含数组

你应该有

[
    {source: "Microsoft", target: "Amazon", type: "licensing"},
    {source: "Microsoft", target: "HTC", type: "licensing"},
    {source: "Samsung", target: "Apple", type: "suit"},
    {source: "Motorola", target: "Apple", type: "suit"},
]
于 2012-04-06T19:59:09.283 回答
1

myData.json的 JSON 无效。

它似乎包含一个对象,该对象本身包含四个对象-但尚未为这些内部对象指定属性名称。

这将是有效的

{
    "one"   : { "source":  "Microsoft", "target" : "Amazon", "type" : "licensing" },
    "two"   : { "source" : "Microsoft", "target" : "HTC",    "type" : "licensing" },
    "three" : { "source" : "Samsung",   "target" : "Apple",  "type" : "suit" },
    "four"  : { "source" : "Motorola",  "target" : "Apple",  "type" : "suit" }
}

但是,鉴于您的listOfItems,我认为这不是您想要的。您可能需要一个对象数组。

这是通过使用方括号而不是大括号来完成的

[
    { "source":  "Microsoft", "target" : "Amazon", "type" : "licensing" },
    { "source" : "Microsoft", "target" : "HTC",    "type" : "licensing" },
    { "source" : "Samsung",   "target" : "Apple",  "type" : "suit" },
    { "source" : "Motorola",  "target" : "Apple",  "type" : "suit" }
]

另外,请注意最后一项的尾随逗号。它在某些浏览器/ javascript 引擎中中断。我不知道 JSON 解析器是否允许。

于 2012-04-06T20:00:23.920 回答
1

这是一个异步事件。您不能像使用异步事件那样执行变量赋值,您必须执行您在该特定函数中执行的任何操作。否则请确保它是一个同步事件(通过在 JQuery 中设置正确的变量),它将等待操作,在这种情况下,在继续代码之前完成 GET 请求(不推荐)。

于 2012-04-07T11:04:48.200 回答
0

您可以使用 jQuery.parseJSON() 解析 json;

http://api.jquery.com/jQuery.parseJSON/

传入格式错误的 JSON 字符串可能会导致抛出异常。例如,以下都是格式错误的 JSON 字符串:

{test: 1} (test does not have double quotes around it).
{'test': 1} ('test' is using single quotes instead of double quotes).

此外,如果您不传入任何内容,则 parseJSON 将返回空字符串、null 或未定义的“null”。在浏览器提供 JSON.parse 的本机实现的地方,jQuery 使用它来解析字符串。有关 JSON 格式的详细信息,请参阅http://json.org/

于 2012-04-06T19:57:44.957 回答