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

How to strip invalid characters from a JSON $http.get() request?

本文关键字:请求 删除 字符 无效 get JSON http      更新时间:2023-09-26

我正在从一个不受控制的web服务中提取数据。结果包括名称中撇号前的反斜杠(如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:无效字符未定义

我一直在寻找重新格式化响应的解决方案,但任何带有撇号的JSON结果都会立即导致此错误。因此,除非我知道如何在错误发生之前对对象进行寻址,否则似乎不可能使用results.replace(/'/g,"");这样的简单解决方案。

在将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);
  });
};