访问多维对象JavaScript

时间:2013-07-28 00:00:59

标签: javascript jquery json

确定。经过大约一个小时的尝试,想到不同的方法来做到这一点,我的高通是普遍的(这个问题将证明这一点)。

我有一个看起来像这样的JSON对象:

{
    newEvent: {
        Event: {
            name: "Something",
            timestamp: {
                month: "07",
                day: "27",
                year: "2013",
                hour: "07",
                min: "42",
                meridian: "pm"
            },
            duration: "2",
            durationMeasure: "min"
        }
    },
    msg: "Event Added"
}

它在jquery ajax完整回调函数中返回,因此它位于一个名为data的参数中。 使用Chrome,我可以console.log() datadata.newEventdata.msgdata['newEvent']data['msg']。唯一一个返回未定义的东西的是data(打印上面的内容)

我的问题:在data中,我如何在世界上找到任何东西?!任何有关JavaScript菜鸟的见解都将不胜感激! =)

编辑: 代码段:

function eventAdditionalFinish(data,textStatus) {
    console.log("data: ",data,"\n");
    console.log("data['newEvent']: ",data['newEvent'],"\n");
    console.log("data['msg']: ",data['msg'],"\n");

    console.log("data.newEvent: ",data.newEvent,"\n");
    console.log("data.msg: ",data.msg,"\n");
}

Chrome控制台的输出:

data:  {"newEvent":{"Event":{"name":"Something","timestamp":{"month":"07","day":"27","year":"2013","hour":"07","min":"42","meridian":"pm"},"duration":"2","durationMeasure":"min"}},"msg":"Event Added"}
data['newEvent']:  undefined 
data['msg']:  undefined 
data.newEvent:  undefined 
data.msg:  undefined 

3 个答案:

答案 0 :(得分:1)

确定,

如果使用jQuery的json()函数代替ajax(),它会将响应解析为json对象。

但是,如果您正在使用stock函数并将结果作为名为data的字符串获取,那么您需要这样的内容将其转换为对象...

response = JSON.parse(data);

然后你可以做......

response.newEvent.blah;

正如你所料。

请注意,您的示例实际上并不是有效的json。应引用属性名称......

{
    "newEvent": {
        "Event": {
            "name": "Something",
            "timestamp": {
                "month": "07",
                ...

正如其他人指出的那样,您也可以通过指定数据类型告诉ajax()将结果转换为对象(就像您调用json()一样)...

$.ajax({
     ...
     dataType: 'json',
     success: function(data) {
         alert(data.newEvent.Event.name);   
     }
});

答案 1 :(得分:1)

我想这是因为你从服务器收到一个字符串。所以有两个选择:

  • 在ajax参数中指定dataType: 'json'
  • 或在尝试访问元素之前使用JSON.parse(data)

答案 2 :(得分:0)

以下表示法应该有效,只是用类似的例子进行测试

$.ajax({
         url:    'yoururl',
         success: function(data) {
             alert(data.newEvent.Event.name);   
         },
         async:   false
    });

在这种情况下,您将获得的数据变量是具有属性的对象。要访问属性write:ObjectsName.attributeName

如果有属性也是包含属性的对象,则可以访问这些属性,如:ObjectsName.attributeName1.attrubteName2(其中attribute1也是包含属性的对象)

如果我错了,请纠正我,我也是javascript / jquery-ajax的新手,但我昨天遇到了同样的问题:)