如何使用jQuery从JSON读取文件?

时间:2012-04-06 19:52:44

标签: javascript jquery json

我正在尝试使用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 Developer指出此代码后listOfItems未定义。为什么?我确信javascript,HTML和JSON文件都位于同一目录中。

5 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分: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"},
]

答案 2 :(得分:1)

您的myData.json无效JSON。

它似乎包含一个Object,它本身包含四个对象 - 但这些内部对象没有给出属性名称。

这是有效的

{
    "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解析器是否允许它。

答案 3 :(得分:1)

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

答案 4 :(得分: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).

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