2014-11-03 31 views
0

我從我不控制的Web服務中提取數據。結果包括撇號之前的反斜槓(例如O'Donnell)。根據JSLint.com,JSON的結構是有效的 - ,除非響應中包含反斜槓

我已經提醒了Web服務的提供者。當我在等待ReallyBigCo的迴應時,我想了解更多關於請求端有什麼可能的信息。

有沒有辦法在製作$ http.get()請求時去掉JSON對象中的字符?

我一直在尋找解決方案來捕獲響應作爲一個字符串來剝離字符。但是,只要$ http.get()函數完成,我就會收到錯誤消息。

這AngularJS代碼工作正常時(JSON響應有效):

var app = angular.module('app',[]); 

app.factory('appresults', function($http) { 
    return { 
    getAsync: function(callback) { 
     var myURL = https://address-to-really-big-co-webservice.com; 
     $http.get(myURL).success(callback); 
    } 
    }; 
}); 

app.controller('appcontroller', function($scope, appresults) { 
    appresults.getAsync(function(results) { 
    $scope.appdata = results.findUsers; 
    }); 
}); 

我可以使用此代碼時,JSON是有效的顯示在我的網頁郵件列表:

<p ng-repeat="item in appdata">{{item.email}}</p> 

下面是工作JSON結果的一個例子:

{"findUsers":[ 
{"email":"[email protected]"}, 
{"email":"[email protected]"}, 
{"email":"[email protected]"} 
]} 

雖然這些JSON結果導致ERRO R:

{"findUsers":[ 
{"email":"[email protected]"}, 
{"email":"[email protected]"}, 
{"email":"[email protected]"}, 
{"email":"ddd.o\'[email protected]"} 
]} 

與撇號的結果會在控制檯下面的錯誤在IE9:

語法錯誤:無效的characterundefined

我一直在尋找解決方案,以格式化的響應,但帶撇號的任何JSON結果都會立即導致此錯誤。所以似乎不可能使用簡單的解決方案,例如results.replace(/'/g,"");,除非我知道如何在發生錯誤之前解決問題。

+0

@ T.J.Crowder是角度解析它。我有這樣的問題。我通過使用Ajax而不是Angular解決了這個問題,這不是一個很好的解決方案。 – 2014-11-03 23:04:30

+0

@ toggy-tog-togs:我在仔細檢查JSON.org後刪除了這個問題。 – 2014-11-03 23:05:58

回答

1

你可以做你自己的反應的轉型和「修復」轉換到JSON對象自己(plnkr)之前的數據:

$scope.testOther = function() { 
    $http.get(url, { 
    transformResponse: function(data, headersGetter) { 
     // here data is the raw string, you can fix the data here 
     // replace first object property name "coord" with "FIXED" 
     data = data.replace("coord", "FIXED"); 
     return angular.fromJson(data); 
    } 
    }).success(function(data) { 
    setValues(data); 
    }); 
}; 
+0

謝謝。查看transformResponse的示例很有幫助。我正在測試代碼的一個副本,並且我發現它可以與您的URL一起工作 - 並且它也適用於我需要使用**的Web服務,如果JSON有效**。當我提出的請求中不包含帶有反斜槓的名字時,替換函數將起作用。如果我發出一個包含帶撇號名稱的請求,那麼JSON對象是無效的(因爲該反斜槓),並且出現類似的錯誤:SyntaxEror:Invalid Character error。 – charliebowden 2014-11-04 13:24:23

+0

您可能需要手動解析JSON,或者編寫一些腳本來替換它,但它在任何情況下都不起作用。例如,你可以用'\'替換''',但是你必須確保它不是字符串的末尾,即緊跟'',''''''或']'。但是如果其中一個角色也在你的字符串中呢?沒有辦法可靠地100%解析無效的JSON,最好讓人們糾正他們的Web服務。 – 2014-12-30 21:48:29

相關問題