JavaScript 中解析 JSON 文件失败
2017-03-07
138
我试图访问类型(标记的下方方块)但没有成功
我的代码落在开头(当我检查长度时):
Object.data.ServiceData.modelObjects.length;
(例如,我想获取
modelObjects
对象的长度)
我收到了一条消息:
error: angular.js:13920 TypeError: Cannot read property 'modelObjects' of undefined
这是我使用它的方式:
function _getIds() {
var path = vm.package.path;
var SERVER_PATH = Config.SERVER_PATH;
return $q(function (resolve, reject) {
$http.post(SERVER_PATH + '/getLastGetRelated', { path: vm.package.path })
.then(
function (success) {
resolve(success);
},
function (err) {
reject(err);
})
});
}
this.camera = function() {
_getIds().then(function(ids){
console.log(Object.ServiceData.modelObjects.length);
readJson(ids);
})
}
2个回答
这可能不是问题的答案,但我想指出一点。http 默认以承诺的形式返回响应。但在这里,手动创建承诺以捕获已经是承诺的响应。这是不必要的。只需返回 http 请求,而无需像这样创建新的承诺
function _getIds() {
var path = vm.package.path;
var SERVER_PATH = Config.SERVER_PATH;
return $http.post(SERVER_PATH + '/getLastGetRelated', {
path: vm.package.path
})
}
this.camera = function() {
_getIds().then(function(ids) {
console.log(Object.ServiceData.modelObjects.length);
readJson(ids);
})
}
Sachila Ranawaka
2017-03-07
my code falls in the beginning (when i check the length) :
Object.data.ServiceData.modelObjects.length;
[...]
console.log(Object.ServiceData.modelObjects.length);
实际上,您正在检查:
Object.ServiceData.modelObjects.length
而不是:
Object.data.ServiceData.modelObjects.length;
查看数据最简单的方法是暂时更改:
console.log(Object.ServiceData.modelObjects.length);
为:
console.log(JSON.stringify(Object));
但请记住,
Object
是 JavaScript 中的内置函数(实际上是构造函数),因此不太可能包含您的数据。
此外,这个:
return $q(function (resolve, reject) {
$http.post(SERVER_PATH + '/getLastGetRelated', { path: vm.package.path })
.then(
function (success) {
resolve(success);
},
function (err) {
reject(err);
})
可以写成:
return $http.post(SERVER_PATH + '/getLastGetRelated', { path: vm.package.path });
一般建议:
现在,如果您不希望程序在访问可能存在或不存在的属性时崩溃,您可以使用:
console.log(Object && Object.data && Object.data.ServiceData
&& Object.data.ServiceData.modelObjects
&& Object.data.ServiceData.modelObjects.length);
或使用 lodash:
console.log(_.get(Object, 'data.ServiceData.modelObjects.length'));
或使用 hoek:
console.log(hoek.reach(Object, 'data.ServiceData.modelObjects.length'));
参见:
- https://lodash.com/docs/4.17.4#get
- https://github.com/hapijs/hoek/blob/master/API.md#reachobj-chain-options
总之,你的代码存在很多问题代码。您很可能对承诺的工作原理、您获得的数据、在哪个变量中以及如何访问所需的部分感到困惑。
我的建议是阅读更多有关承诺的内容,检查您从 API 获得的数据,并仔细从头开始编写代码。不幸的是,没有人能够以现在的形式为您修复该代码,因为我们不知道您的数据是什么样的,也不知道您到底想用它做什么。
rsp
2017-03-07