如何在控制器中格式化JSON数据

时间:2017-04-25 08:38:15

标签: javascript angularjs arrays json

我是AngularJS和JSON的新手。我陷入了这个阶段,我想在JSON中过滤不必要的字段。

我在控制器中使用了代码:

var data = $scope.choices; // Is an array
var datav = (JSON.stringify(data)); // array converted into a string need to be filtered
alert(datav);

如果我alert(datav)正在获取下面提到的JSON数据。

[{"title":"g","$$hashKey":"object:3"},{"id":"choice2","$$hashKey":"object:6","title":"ghgh"},{"id":"choice3","$$hashKey":"object:11","title":"fgh"}]

我只想"标题"我不想要$$hashKeyid。怎么做?

6 个答案:

答案 0 :(得分:4)

您可以使用angular.toJson而不是JSON.stringify来为您省略$$hashkey

  

angular.toJson

     

将输入序列化为JSON格式的字符串。由于AngularJS在内部使用此表示法,因此将删除具有前导$$字符的属性。

像这样,



var myobj = [{
  "title": "g",
  "$$hashKey": "object:3"
}, {
  "id": "choice2",
  "$$hashKey": "object:6",
  "title": "ghgh"
}, {
  "id": "choice3",
  "$$hashKey": "object:11",
  "title": "fgh"
}]

console.log(angular.toJson(myobj))
console.log(JSON.stringify(myobj))

<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>
&#13;
&#13;
&#13;

修改:如果您只想显示某些属性,请按照其他答案中的说明使用Array.map。如果您想省略angular.toJson保留其他所有内容,$$hashkey只会对此处有所帮助。

答案 1 :(得分:3)

您可以使用Array.map()功能来实现您想要的功能,并仅返回您感兴趣的属性

&#13;
&#13;
var data = [{"title":"g","$$hashKey":"object:3"},{"id":"choice2","$$hashKey":"object:6","title":"ghgh"},{"id":"choice3","$$hashKey":"object:11","title":"fgh"}];

var datav = data.map(d => ({title: d.title}));

console.log(datav)
&#13;
&#13;
&#13;

答案 2 :(得分:1)

试试这个

&#13;
&#13;
<html>
<head>
	<script Src="https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.6.1/angular.js"></script>

	<script>
		var app=angular.module("myapp", []);
		app.controller("namesctrl", function($scope){
            var data = [{"title":"g","$$hashKey":"object:3"},{"id":"choice2","$$hashKey":"object:6","title":"ghgh"},{"id":"choice3","$$hashKey":"object:11","title":"fgh"}];
            var data1 = data.map(d => ({title: d.title}));
            console.log(data1);
		});

		
	</script>


</head>
<body ng-app="myapp" ng-controller="namesctrl">

</body>
</html>
&#13;
&#13;
&#13;

答案 3 :(得分:0)

var data = $scope.choices.map(function(index,item){
    return {id: item.id};
}); 

这是你如何从选择数组

中映射你需要的所需对象

答案 4 :(得分:0)

您可以使用Array.prototype.map

当您第一次收到阵列时:

 const data = [
  {title: "hello" , "unwanted" : 34},
  {title: "hello" , "unwanted" : 35},
  {title: "hello" , "unwanted" : 36},
  {title: "hello" , "unwanted" : 37},

]



const wanted = data.map( d => {
  return {title: d.title}
});

console.log(wanted);

答案 5 :(得分:0)

我相信您正在使用第三方库。我的猜测是Angular Material,它为下拉数组值添加了类似的$$haskey属性。理想情况下,这不应该对您的数组进行任何更改,您仍然可以在数组对象上获取属性。

但是如果你特意想要删除这些不需要的属性,你应该使用.map函数从这个数组中创建一个新数组。例如:

var newArray= orginalArray.map(element => ({title: element.title}));

您可以根据需要取出任意数量的属性,并留下不需要的属性。您的新数组是与旧数组完全不同的引用。

希望这有帮助