无法访问返回对象中的属性

时间:2011-05-27 14:00:44

标签: javascript jquery ajax json struts

我遇到了一个问题,我似乎无法查询我的JSON回来,我可以打印出整个回复,这是我的JSON响应,我只能在我做msgBox()时看到这个提示:

{ "Addresses" : 
    "[{ 
        Building=Megatron Skyscraper,
        BuldingId=1998,
        AccountId=2000,
        Number=007,
        Name=Megatron 
        },{
        Building=StarScream Skyscraper,
        BuldingId=1999,
        AccountId=2001,
        Number=008,
        Name=StarScream
}]"}

这是我的代码:

function getReadyStateHandler(req)
{
    // Return an anonymous function that listens to the
    // XMLHttpRequest instance
    return function ()
    {
        // If the request's status is "complete"
        if (req.readyState == 4)
        {
            // Check that a successful server response was received
            if (req.status == 200)
            {
                msgBox("JSON Response recieved...");
                var addresses = req.responseText.toJSON();
                msgBox(req.responseText.toJSON());
            }
            else
            {
                // An HTTP problem has occurred
                alert("HTTP error: " + req.status);
            }
        }
    }
}

我已尝试过addresses.Address[0].Cityaddressess.Addresses[0].City等许多其他内容 - 但这有点令人困惑!

2 个答案:

答案 0 :(得分:3)

除了响应中没有City键之外,返回的对象只包含一个(格式错误的)字符串,而不是一个对象数组。您可以使用http://jsonlint.com

进行检查

您是如何创建回复的?它看起来应该更像:

{ "Addresses" : [{ 
        "Building":"Megatron Skyscraper",
        "BuldingId":1998,
        "AccountId":2000,
        "Number":7,
        "Name":"Megatron"
        },{
        "Building":"StarScream Skyscraper",
        "BuldingId":1999,
        "AccountId":2001,
        "Number":8,
        "Name":"StarScream"
}]}

更新: "Number":007"Number":008中的前导零可能会导致问题,因为它们会被解释为八进制值。我在答案中删除了它们。

答案 1 :(得分:0)

您的回复有效,但地址是字符串而不是数组。如果它被视为数组,那么引号不应该存在。如果你愿意,你可以稍微破解它

address = JSON.parse(addresses.Addresses);