首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何从JSON $http.get()请求中删除无效字符?

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

Stack Overflow用户
提问于 2014-11-03 23:00:50
回答 1查看 3.9K关注 0票数 0

我从一个我无法控制的网络服务中提取数据。结果包括在名称(如O‘’Donnell)中撇号之前的反斜杠。根据JSLint.com,JSON的结构是有效的--除非响应包含反斜杠撇号。

我已经通知了web服务的提供者。在等待ReallyBigCo的回复时,我想了解更多关于请求结束时可能发生的事情。

是否有方法在发出$http.get()请求时从JSON对象中删除字符?

我一直在寻找解决方案,以便将响应捕获为字符串,以便删除字符。但是,一旦$http.get()函数完成,我就会得到一个错误。

此AngularJS代码运行良好(当JSON响应有效时):

代码语言:javascript
运行
复制
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有效时,我可以使用以下代码在我的页面中显示电子邮件列表:

代码语言:javascript
运行
复制
<p ng-repeat="item in appdata">{{item.email}}</p>

下面是一个使用JSON结果的示例:

代码语言:javascript
运行
复制
{"findUsers":[
{"email":"aaa.somebody@domain.com"},
{"email":"bbb.somebody@domain.com"},
{"email":"ccc.somebody@domain.com"}
]}

虽然这些JSON结果会导致一个错误:

代码语言:javascript
运行
复制
{"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,"");,除非我知道如何在错误发生之前对对象进行寻址。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-11-04 00:29:50

您可以自己转换响应并“修复”数据,然后自己将JSON转换为对象(http://plnkr.co/edit/cNw6Ck2H831PtPuSxRk4?p=preview):

代码语言:javascript
运行
复制
$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);
  });
};
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26724839

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档