1

我能够使用 JSON.parse 解析返回简单数据的 JSON,但我无法处理返回对象、日期、字符串等的数据。

var theData=JSON.parse(theData);

像这样的 JSON.parse 返回 [Object] 对象,根本没有数据(我可以看到数据已成功返回,因为如果我关闭了 JSON.parse,它会将所有数据作为字符串返回)。

{
"AppName": "TheName",
"AppUrl": "https:\/\/app\/icons\/unknown.png",
"aGUID": "45c055d2-2edc-d4444"."DateCreated": "8\/23\/2012 11:04AM", {
    "ID": "yser123",
    Name ":" User "}
    }

在 javascript 中解析这些数据的最佳方法是什么(我无法使用 jquery)?

注意:我写的 JSON 假设它是有效的

这是我用来检索数据的代码..

var xhReq = new XMLHttpRequest();
xhReq.open("POST", "ClientService.svc/REST/GetDetail", false);
xhReq.send(null);
var serverResponse = xhReq.responseText;
alert(serverResponse);
return serverResponse;
4

3 回答 3

1

听起来这确实有效。如果你打电话给这样的事情:

alert(JSON.parse(serverResponse))

它将显示正确的 [object Object]。如果你打电话

alert(JSON.parse(serverResponse).appName)

您应该看到 appName。如果您没有看到“SyntaxError”被抛出,则 JSON.parse() 正在工作

于 2012-10-01T19:25:06.317 回答
1

首先,不要使用同步 XHR。将您的 JavaScript 重写为异步的。

function getDetail(cb) {
    var xhReq = new XMLHttpRequest();
    xhReq.open("POST", "ClientService.svc/REST/GetDetail", true);
    xhReq.onreadystatechange = function() {
        if (xhReq.readyState == 4) cb(xhReq.responseText);
    }
    xhReq.send(null);
}

// to call:

getDetail(function(data) {
    JSON.parse(data);
}

其次,您的问题不在于 JSON 解析不正确。这是您对alert. 当您传递serverResponse object时,alert通过调用对象的toString方法将对象强制转换为字符串,该方法仅返回'[object Object]'

试试console.log。可以在控制台中检查对象。

于 2012-10-01T19:19:47.753 回答
0

您的 JSON 格式错误,数据需要是字符串。

所以,这会起作用(我打破了界限以提高可读性):

var data = "{" + 
    "    \"AppName\": \"TheName\", " + 
    "    \"AppUrl\": \"https:\/\/app\/icons\/unknown.png\", " + 
    "    \"aGUID\": \"45c055d2-2edc-d4444\", " + 
    "    \"DateCreated\": \"8\/23\/2012 11:04AM\", " +
    "    \"foo\": { " + 
    "        \"ID\": \"yser123\", " + 
    "        \"Name\":\"User\"" + 
    "    }" + 
    "}";
var obj = JSON.parse(data);
alert( obj.AppName );

当然,如果您使用简单的引号作为字符串分隔符,代码将是:

var data = '{' + 
    '    "AppName": "TheName", ' + 
    '    "AppUrl": "https:\/\/app\/icons\/unknown.png", ' + 
    '    "aGUID": "45c055d2-2edc-d4444", ' + 
    '    "DateCreated": "8\/23\/2012 11:04AM", ' +
    '    "foo": { ' + 
    '        "ID": "yser123", ' + 
    '        "Name":"User"' + 
    '    }' + 
    '}';

不起作用

var data = "{" + 
    "    'AppName': 'TheName', " + 
    "    'AppUrl': 'https:\/\/app\/icons\/unknown.png', " + 
    "    'aGUID': '45c055d2-2edc-d4444', " + 
    "    'DateCreated': '8\/23\/2012 11:04AM', " +
    "    'foo': { " + 
    "        'ID': 'yser123', " + 
    "        'Name': 'User'" + 
    "    }" + 
    "}";

jsFiddle:http: //jsfiddle.net/9pmdm/1/

于 2012-10-01T18:59:48.317 回答