检索外部JSON数据

时间:2012-07-30 19:14:20

标签: javascript jquery html json

我需要能够从我正在制作的应用程序中检索和显示网站的JSON数据。在将它实现到我的应用程序之前,我认为我应该通过在其他地方测试它来确保我理解它是如何工作的。我制作了以下HTML和JSON代码来测试它,但如果我运行应用程序,我得到Uncaught TypeError:无法在文件中读取未定义的属性'0':///android_asset/www/projectName.html:11 我做错了什么?

HTML:

<html>
<head>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js">
    </script>
<script type="text/javascript">
    $(document).ready(function(){
        $("button").click(function(){
            $.get('testData.json', function(data) {
                alert('get performed');
                var obj = eval ("(" + data + ")");
                $("p").html(obj.data_set[0].data1);
            });
        });
    });
</script>
</head>

<body>
<h2>Heading</h2>
<p>Display</p>
<button>Click me</button>
</body>
</html>

JSON文件:

[{"data_set":{"data1":"string","data2":null,"data3":22.0}}]

3 个答案:

答案 0 :(得分:0)

$.get更改为$.getJSON或在$ .get中设置数据类型,如下所示

<强>更新

我也意识到你没有像这样正确地解析json

 $.get('testData.json', function(data) {
     alert('get performed');
     $("p").html(obj[0].data_set.data1);
 },'json');

答案 1 :(得分:0)

您使用的是eval,这是不必要的。我建议你阅读what JSON is and how to use it

您不需要在eval上使用data,因为它已经是JSON对象。您的代码存在的问题是,您尝试将data_set作为data的属性进行访问。但是,data实际上是一个数组,有一个未命名的对象。该对象具有成员data_set。反过来,data_set是一个对象,而不是一个数组,所以你不能使用data_set[0]。你想要有类似的东西:

$(document).ready(function(){
    $("button").click(function(){
        $.getJSON('testData.json', function(data) {
            alert('get performed');
            $("p").html(data[0].data_set.data1);
        });
    });
});​

查看this jsfiddle

答案 2 :(得分:0)

请参阅此jsFidle:http://jsfiddle.net/7Uxtg/

我包含了一些遍历整个数据结构的代码(不只是一条可能的路径)。拿你需要的部分; - )

$(document).ready(function () {
    $("button").click(function () {
        $.ajax({
            url: '/gh/gist/response.json/37ab4c69a04628428ce2',
            dataType: 'json',
            success: function (json) {
                // to display everything
                /*$.each(json, function (k, v) {
                    $.each(v.data_set, function (key, value) {
                        $('p').append(value);
                    });
                });*/

                // to display just the string
                $('p').html(json[0].data_set.data1);
            }
        });
    });
});