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

何よりもまず、同期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 オブジェクトを渡すときはalert、オブジェクトのメソッドを呼び出してオブジェクトを文字列に強制します。toStringこのメソッドは単に。を返します'[object Object]'

試してみてくださいconsole.log。オブジェクトはコンソールで検査できます。

于 2012-10-01T19:19:47.753 に答える
1

実際にはこれが機能しているように聞こえます。あなたがこのようなものを呼ぶならば:

alert(JSON.parse(serverResponse))

正しい[オブジェクトオブジェクト]が表示されます。あなたが電話する場合

alert(JSON.parse(serverResponse).appName)

appNameが表示されます。「SyntaxError」がスローされていない場合は、JSON.parse()が機能しています

于 2012-10-01T19:25:06.317 に答える
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 に答える