我从一个我无法控制的网络服务中提取数据。结果包括在名称(如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":"aaa.somebody@domain.com"},
{"email":"bbb.somebody@domain.com"},
{"email":"ccc.somebody@domain.com"}
]}
虽然这些JSON结果会导致一个错误:
{"findUsers":[
{"email":"aaa.somebody@domain.com"},
{"email":"bbb.somebody@domain.com"},
{"email":"ccc.somebody@domain.com"},
{"email":"ddd.o\'somebody@domain.com"}
]}
使用撇号的结果会在IE9中的控制台中创建以下错误:
SyntaxError:无效字符未定义
我一直在寻找重新格式化响应的解决方案,但是任何带有撇号的JSON结果都会立即导致此错误。因此,似乎不可能使用简单的解决方案,如results.replace(/'/g,"");
,除非我知道如何在错误发生之前对对象进行寻址。
发布于 2014-11-03 16:29:50
您可以自己转换响应并“修复”数据,然后自己将JSON转换为对象(http://plnkr.co/edit/cNw6Ck2H831PtPuSxRk4?p=preview):
$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);
});
};
https://stackoverflow.com/questions/26724839
复制