【问题标题】:Accessing JSON with JQuery使用 JQuery 访问 JSON
【发布时间】:2012-02-12 23:41:45
【问题描述】:

我需要使用 JQuery 访问一些 JSON。出于某种原因,它不起作用,并且由于 getJSON 方法静默失败,我无法弄清楚出了什么问题。我检查了 JSON Url 是否正确。谢谢!

HTML:

<html>
<head>
    <script src="//code.jquery.com/jquery-1.6.4.min.js"></script>
<script type="text/javascript">
        $(document).ready(function(){
        $.getJSON('../src/json/baseball.json', function(data) {
            $("#add").html(data.baseball[0].levels[0].games[0].versus);
        });
        });
    </script>   
</head>
<body>
    <p id= "add"></p>
</body>
</html>

JSON:

{"baseball":
[{
    "gender":"boys",
    "levels":[
    {
        "level": "varsity",
        "games":[
        {
            "versus":"Fullerton",
            "homeaway":"Home",
            "month":"February",
            "date":"27",
            "year":"2012",
            "troyscore":"32",
            "vsscore":"41",
        },
        {
            "versus":"Sunny Hills",
            "homeaway":"Away",
            "month":"March",
            "date":"28",
            "year":"2012",
            "troyscore":"20",
            "vsscore":"17",
        }]
    },
    {
        "level": "jv",
        "games":[
        {
            "versus":"Sonora",
            "homeaway":"Home",
            "month":"January",
            "date":"20",
            "year":"2012",
            "troyscore":"15",
            "vsscore":"21",
        },
        {
            "versus":"Valencia",
            "homeaway":"Away",
            "month":"April",
            "date":"30",
            "year":"2012",
            "troyscore":"40",
            "vsscore":"1",
        }]
    }]
},
{
    "gender":"girls",
    "levels":[
    {
        "level": "varsity",
        "games":[
        {
            "versus":"Acacia",
            "homeaway":"Home",
            "month":"February",
            "date":"27",
            "year":"2012",
            "troyscore":"32",
            "vsscore":"41",
        },
        {
            "versus":"LV",
            "homeaway":"Away",
            "month":"March",
            "date":"28",
            "year":"2012",
            "troyscore":"20",
            "vsscore":"17",
        }]
    },
    {
        "level": "jv",
        "games":[
        {
            "versus":"Commonwealth",
            "homeaway":"Home",
            "month":"January",
            "date":"20",
            "year":"2012",
            "troyscore":"15",
            "vsscore":"21",
        },
        {
            "versus":"Xishan",
            "homeaway":"Away",
            "month":"April",
            "date":"30",
            "year":"2012",
            "troyscore":"40",
            "vsscore":"1",
        }]
    }]
}]
}

【问题讨论】:

  • 虽然 URL 的行为有点像文件系统路径是很常见的,但 AFAIK 并不是必需的——而且服务器可能不知道(或者,出于安全原因,可能会主动忘记).. 的意思是“父目录”。你试过绝对网址吗?
  • 如果你把console.log(data)放在$("#add") ...前面,你会在控制台看到什么?

标签: jquery ajax json get


【解决方案1】:

您的内部对象的每个最终属性都有尾随逗号,这会使您的 JSON 格式不正确。只需尝试将其粘贴到jsonlint.com。它将在每个对象的最后一个属性上发挥作用。

    {
        "versus":"Fullerton",
        "homeaway":"Home",
        "month":"February",
        "date":"27",
        "year":"2012",
        "troyscore":"32",
        "vsscore":"41", <-- borked JSON
    },

投诉:

Parse error on line 67:
...                    },                 
-----------------------^
Expecting 'STRING'

如果返回的 JSON 格式不严格,$.getJSON 将静默失败。我想提供来自文档的参考,但 jQuery 站点似乎已关闭....bleh。

【讨论】:

  • 在非 IE 浏览器中仍然可以工作,不能成为不工作的原因。
  • 不一定是浏览器,是jQuery只接受格式良好的JSON。
  • @ShankarSangoli:这是 JSON,不是 JavaScript。它们是具有不同规则的不同规格。 jsfiddle.net/5n8Qz
  • @ShankarSangoli:这是不正确的。 JSON 是一种文本格式,其结构仿照 JavaScript,但它与 JavaScript 不同。请参阅我在上面的评论中添加的示例。解析包含尾随逗号的 JSON 文本会导致 Chrome 中出现 SyntaxError。
  • @ShankarSangoli:但它不是 JSON。然后是 JavaScript。这就是浏览器不关心的原因。它们是具有不同规则的不同规范。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多