我从我无法控制的网络服务中提取数据。结果包括名称中的撇号之前的反斜杠(例如O' Donnell)。根据JSLint.com,JSON的结构是有效的 - 除非响应包含反斜杠的撇号。
我已向网络服务提供商发出警告。在我等待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:无效的characterundefined
我一直在寻找重新格式化响应的解决方案,但任何带撇号的JSON结果都会立即导致此错误。因此,除非我知道如何在错误发生之前解决对象,否则似乎不可能使用results.replace(/'/g,"");
之类的简单解决方案。
答案 0 :(得分:1)
您可以自行转换响应并修复&#34;在将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);
});
};