如何从JSON $ http.get()请求中删除无效字符?

时间:2014-11-03 23:00:51

标签: javascript json angularjs

我从我无法控制的网络服务中提取数据。结果包括名称中的撇号之前的反斜杠(例如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,"");之类的简单解决方案。

1 个答案:

答案 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);
  });
};