我正在从实时流数据中检索JSON。 对于第一次调用,我将获得具有时间和值的数据集数组。但是在第二个JSON数据集数组中是空的。我想检查数据集数组是否包含时间密钥。
首次调用后检索到JSON:
{
"activities-heart-intraday": {
"dataset": [{
"time": "00:00:00",
"value": 91
}, {
"time": "00:01:00",
"value": 92
}, {
"time": "00:02:00",
"value": 92
}],
"datasetInterval": 1,
"datasetType": "second"
}
}
第二次调用后检索到JSON:
{
"activities-heart-intraday": {
"dataset": [],
"datasetInterval": 1,
"datasetType": "second"
}
}
我在做
var value = JSON.parse(data);
if (value.hasOwnProperty('time')) {
console.log("here");
}
检查JSON中是否存在时间密钥,但它不起作用。
如何检查json中数组中是否存在特定键?
答案 0 :(得分:2)
首先,您必须检查dataset
是否为空数组。然后检查time
是否已定义。
这可以通过以下方式解决:
if (dataset[0] !== undefined && dataset[0].time !== undefined)
或只是:
if (dataset[0] && dataset[0].time)
如果你想遍历数组:
dataset.forEach(function (data) {
if (data.time) {
// your code
}
});
答案 1 :(得分:0)
数据有一个数据集数组,所以我们需要首先检查数组是否在那里,然后如果其中一个数组成员有时间属性
if( data.hasOwnProperty('dataset') && data.dataset.length != 0){
if( data.dataset[0].hasOwnProperty('time')){
console.log('true');
}
}
答案 2 :(得分:0)
因为在JS中你不能原生地设置和访问具有" -
"的对象属性。通过点表示法将字符定义为字符串并使用括号表示法来设置和访问它们。所以你可以像这样检查
data["activities-heart-intraday"].dataset.length > 0 && data["activities-heart-intraday"].dataset.every(e => !!e.time);
答案 3 :(得分:0)
我真的不能说出您的问题中的data
应该是什么,但是如果它是整个JSON对象,那么最简单的方法是:
if(data["activities-heart-intraday"]["dataset"][0]["time"])
console.log('time is set)
但是要当心!例如,如果未设置dataset
,则会收到错误消息,试图从time
获取undefined
键,代码将崩溃。我建议使用像这样的简单递归函数:
function is_there_the_key(json, keys){
if(keys.length == 0)
return true //we used the whole array, and every key was found
let key = keys.shift() //pop(get and remove) the first string from keys
if(!json[key]){
console.log(key + ' not found')
return false //one of the keys doesn't exist there
}
return is_there_the_key(json[key], keys)
}
无论您返回true
还是false
,它们都会到达地面。
作为json
参数,您要传递要搜索的json。
作为keys
参数,您传递了一个键数组(通常是字符串),以便按顺序进行操作。
例如:
if(is_there_the_key(data, ["activities-heart-intraday", "dataset", 0, "time"])
//we found the key, do something here