Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/37.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
无法获取JSON对象的长度_Json_Node.js_Firebase_Firebase Realtime Database_Dialogflow Es - Fatal编程技术网

无法获取JSON对象的长度

无法获取JSON对象的长度,json,node.js,firebase,firebase-realtime-database,dialogflow-es,Json,Node.js,Firebase,Firebase Realtime Database,Dialogflow Es,我在尝试访问NodeJSON中json对象的长度时遇到“TypeError:无法将未定义或null转换为object” 以下是我的数据的外观: { “学院”:[ { “学院”:[], “部门”:[ 1. 2. 3. ], “普通课程”:[], “id”:1, “名称”:“艺术学院”, “短名称”:“, “url”:“/content.php?catoid=16&navoid=1919” }, { “学院”:[], “部门”:[ 4. 5. 6. ], “普通课程”:[], “id”:2, “名称

我在尝试访问NodeJSON中json对象的长度时遇到“TypeError:无法将未定义或null转换为object”

以下是我的数据的外观:

{
“学院”:[
{
“学院”:[],
“部门”:[
1.
2.
3.
],
“普通课程”:[],
“id”:1,
“名称”:“艺术学院”,
“短名称”:“,
“url”:“/content.php?catoid=16&navoid=1919”
},
{
“学院”:[],
“部门”:[
4.
5.
6.
],
“普通课程”:[],
“id”:2,
“名称”:“通信学院”,
“短名称”:“,
“url”:“/content.php?catoid=16&navoid=1920”
},
{
“学院”:[],
“部门”:[
7.
12
],
“普通课程”:[],
“id”:3,
“名称”:“教育学院”,
“短名称”:“,
“url”:“/content.php?catoid=16&navoid=1921”
},
{
“学院”:[],
“部门”:[
13,
17,
19
],
“普通课程”:[],
“id”:4,
“名称”:“工程与计算机科学学院”,
“短名称”:“,
“url”:“/content.php?catoid=16&navoid=1922”
},
{
“学院”:[],
“部门”:[
20,
26,
27
],
“普通课程”:[],
“id”:5,
“名称”:“健康与人类发展学院”,
“短名称”:“,
“url”:“/content.php?catoid=16&navoid=1923”
},
{
“学院”:[],
“部门”:[
28,
29,
32,
48
],
“普通课程”:[],
“id”:6,
“名称”:“人文社会科学学院”,
“短名称”:“,
“url”:“/content.php?catoid=16&navoid=1924”
},
{
“学院”:[],
“部门”:[
52,
57
],
“普通课程”:[],
“id”:7,
“名称”:“自然科学与数学学院”,
“短名称”:“,
“url”:“/content.php?catoid=16&navoid=1925”
},
{
“学院”:[],
“部门”:[
58,
59,
63
],
“普通课程”:[],
“id”:8,
“名称”:“米哈伊洛商业与经济学院”,
“短名称”:“,
“url”:“/content.php?catoid=16&navoid=1926”
}
]
}
步骤1-将其解析为节点:

let colleges = JSON.parse(data)
步骤2-将其保存到dialogflow应用程序数据中:

app.data.collegeData = data;
步骤3-访问长度:

let collegeLength = Object.keys(app.data.collegeData.college).length;
在firebase控制台中获取以下错误:

TypeError:无法将未定义或null转换为对象

更新:

代码如下:

if(app.data.collegeData==未定义){
app.data.collegeData=[];
}
**步骤1=>**
表演学院(学院);
**步骤2=>**
功能展示学院(学院名称){
如果(app.data.collegeData.length==0){
getCollegeData().then(buildSingleCollegeResponse(collegeName))
.catch(函数(err){
console.log('没有学院数据')
console.log(错误)
});
}
否则{
构建单一的CollegeResponse(collegeName);
}
}
**步骤3=>**
函数getCollegeData(){
console.log('内部获取学院数据')
返回请求API(URL)
.then(功能(数据){
let=JSON.parse(数据)
if(学院拥有自己的财产(“学院”)){
保存数据(学院)
}
返回null;
})
.catch(函数(err){
console.log('没有学院数据')
console.log(错误)
});
}
**步骤4=>**
函数saveData(数据){
app.data.collegeData=数据;
console.log(app.data.collegeData)
}
**步骤5=>**
函数buildSingleCollegerResponse(collegeName){
让用户、文本响应;
//log('Data is->'+Object.keys(app.Data.collegeData.college).length);
//log('Length is->'+app.data.collegeData.college.Length);
console.log('计数为->'+app.data.collegeCount);
让collegeLength=Object.keys(app.data.collegeData.college).length;
如果(collegeLength==0){
responseToUser='目前没有学院';
text='目前没有学院';
}
否则如果(app.data.collegeCount对于(var i=1;i在发布
app.data.collegeData=data;

如果
app.data
未定义,则应尝试
app.data={collegeData:data}

或者否定什么应用程序商店。下面的工作

app = {};
app.data = {};
app.data.collegeData = data;

app.data.collegeData.college.length
您不需要执行以下操作

let collegeLength = Object.keys(app.data.collegeData.college).length;
更新:请参阅

这是罪魁祸首:

getCollegeData().then(buildSingleCollegeResponse(collegeName))
调用
buildSingleCollegerResponse(collegeName)
,然后将其返回值传递到
然后
,就像
foo(bar())
调用
bar
并将其返回值传递到
foo

您想将函数传递给
,然后

getCollegeData().then(() => buildSingleCollegeResponse(collegeName))
// An arrow function  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

请注意,从更新的问题中可以清楚地看出,
app.data.collegeData.college
是一个数组,因此不需要使用
Object.keys
。更改:

let collegeLength = Object.keys(app.data.collegeData.college).length;
简单地

let collegeLength = app.data.collegeData.college.length;

数组有一个
length
属性(而非数组对象默认没有)。

第一步:
让colleges=JSON.parse(data)
然后第二步:
app.data.collegeData=data;
不应该是
=colleges
数据仍然是字符串(JSON),但你想处理
大学中的实际数据(这不是JSON,因为它不是字符串)。投票以打字错误/不重复/以后没有用的方式结束,因为如果你纠正了上面的简单错误,它会起作用:谢谢!更新了我的问题。如果有帮助,发布了更多的代码。Th