我有一个Angular实用程序服务器,并且我有一个方法可用于在JSON中搜索某些值,如下所示。
angular.module('myAppModule')
.service('myService', ['$rootScope', function($rootScope)
{
this.myTestJson = '[{"id":1,"somthing":"somthing"},{"id":2,"somthing":"somthing"}]';
this.getJsonObj = function(id)
{
if(id == null || id == undefined || id == "")
return null;
// Units Convert to JSON
var jsonObj = JSON.parse(JSON.stringify(this.myTestJson)); // How can I avoid this doing every time ?
console.log("getJsonObj: jsonObj.length: "+jsonObj.length); //--> Printed invalid number, length of the string
for(var index=0;index < jsonObj.length;index++)
{
if( id == jsonObj[index].id )
return jsonObj[index];
}
return null;
};
}]);
问题是我将JSON数组长度视为无效,因此我无法循环数组。
如何访问在同一服务中定义的此JSON变量。
答案 0 :(得分:2)
this.myTestJson = '[{"id":1,"somthing":"somthing"},{"id":2,"somthing":"somthing"}]';
因此,myTestJson
是一个包含JSON有效负载的String。
var jsonObj = JSON.parse(JSON.stringify(this.myTestJson));
在这里,你将这个JSON字符串序列化为JSON,只是在之后重新解析它。这没有任何意义:你最终会得到与原始字符串完全相同的字符串。就像,如果你将一个整数转换为一个String,然后将该String解析为一个整数,你将得到原始整数。
要解析原始JSON并将其转换为JavaScript数组,您只需要
var array = JSON.parse(this.myTestJson);
但即使这是完全没必要的,因为您可以从一开始就使用JavaScript数组,而不是解析JSON字符串:
var array = [
{
id: 1,
somthing:"somthing"
},
{
id: 2,
somthing: "somthing"
}
];