0

我正在自学 jquery 和 json 来工作。我一直在取得很大的进步,但现在让自己很困惑。我的最终目标是能够从我拥有的文本文件中解析 json,然后将它们存储为 javascript 对象,这样我就可以用它做更多的事情。

这就是我所做的。我有以下 json 格式的数据(从我编写的 java 类创建)。请注意 data.json 看起来像这样:

{"Time": 15, 
"Distance": 20, 
"Position":[{"x":5,"y":10},
{"x":15,"y":20}]}

我在这个问题中格式化了上面的内容,以便通过单独的行更容易阅读,但原始文件在一行中包含所有内容。

我在脚本中使用了以下代码:

$(document).ready(function(){
    console.log("ready!");
    $.getJSON('data.json', function(key,val)
    {
        alert(val.Time);
        alert(val.Distance);
            alert(val.Position);
    });
});

但它输出的是三个“未定义”警报。为什么?我的最终目标是将时间、距离和位置存储为 javascript 对象,以便我可以将它们绘制在我用 html 制作的图表上。但是,我显然无法做到这一点,因为我的警报没有正确读取/解析 json 对象。

于是我凭直觉把它改成如下:

$(document).ready(function(){
        console.log("ready!");
        $.getJSON('data.json', function(key,val)
        {
            alert(key.Time);
            alert(key.Distance);
                alert(key.Position);
        });
    });

好吧,这些都是很有希望的,因为我收到了以下警报:

Alert 1 Output: 15, 
Alert 2 Output: 20, 
Alert 3 Output: [Object Object], [Object Object]

好吧,我更接近了,但现在困惑。关键不应该是给我警报输出“时间”、“距离”和“位置”,而 val 是“15”、“20”和“[Object Object]、[Object Object]”。我认为 json 有点像哈希表。嗯。

另外,我是否需要执行 .each(key, val) 来解析名为 Position 的列表?因为显然 Object Object 对我没有多大帮助。我基本上想将此列表位置保存为 javascript obj 之类

myList = [[5, 10], [15,20]]

无论如何,这是我的想法。我感谢你的时间。我会投票给任何回复并帮助我的人。这对我很重要。

问候, GeekyOmega

4

4 回答 4

3

我不确定你想用你的. 做什么function(key,val) { ... },但这根本不是 jQuery 的 getJSON 的工作方式。getJSON 的回调函数接受三个参数datatextStatusjqXHR。我怀疑您会发现data参数本质上是您想要构建的 javascript 对象,除了字段“x”和“y”而不是每个嵌套数组。要获取数据,我会执行以下操作:

for (var i = 0; i < data.Position.length; i ++)
   do_something_with (data.Position[i].x, data.Position[i].y);
于 2013-07-08T18:45:24.580 回答
2

key正如你所拥有的那样,val它们的名字是错误的。$.getJSON()回调的第一个参数是 JSON 对象。请参阅API Doc 示例,其中回调函数只是传递了一个名为data.

[Object Object]toString()是javascript 中对象的默认值。要获取对象数组的值,您可以迭代data.Position并访问数组中每个对象的xy属性。

编辑以回复您的评论:

您始终可以将 JSON 中的 Position 属性更改为数组数组而不是对象数组。

或者,在客户端,您可以执行以下操作:

var points = [];
$.each(data.Position, function(item) {
    points.push([item.x, item.y]);
});
于 2013-07-08T18:48:15.243 回答
1

重新阅读您的键名。类似route和的词travelTime出现在您的代码中,但不在您的 JSON 中。

尝试这个:

$(document).ready(function(){
        console.log("ready!");
        $.getJSON('data.json', function(key)
        {
            console.log(key.Time);
            console.log(key.Distance);
            console.log(key.Position[0]);
        });
    });
于 2013-07-08T18:53:30.740 回答
0

当你创建一个类用户javascript时,你可以写var pepole={name:"smith",code:"YQ001",println:function(code,name){document.write(this.name+":"+this.code+"<br/>")}};,json是javascript的一个类,但没有方法它只是属性

于 2013-07-09T10:06:00.067 回答