Reputation: 39
before I explain my question, I'll put here my Json code to facilitate the comprehension.
{
"name": "Servers Rotation",
"version": 1.0,
"prefix": ".svr",
"servers": {
"server1": {
"svr": "01x",
"status": 1,
"type": "all"
},
"server2": {
"svr": "02p",
"status": 1,
"type": "all"
},
"server3": {
"svr": "03z",
"status": 1,
"type": "all"
}
}
}
Now, I'm accessing this JSON and trying create a loop to verify all servers (server1, server2, server3) status to match number 1.
If server[num] status equal 1, then the server is enabled.
$.getJSON("servers.json", function(json) {
var servers_available = Object.keys(json.servers).length;
for(i = 1; i <= servers_available; i++) {
if (json.servers.server+i.status == 1) {
alert(servers_prefix+i.svr + " enabled!");
} else {
alert(servers_prefix+i.svr + " disabled");
}
}
});
But, I'm getting NaN
as alert response.
What am I doing wrong? Can you help me? Thank you.
Upvotes: 0
Views: 51
Reputation: 36564
You are making three mistakes over here:
json.servers.server+i.status
. Here you should use Bracket Notation.i.e json.servers['server'+i].status
servers_prefix
which is undefined
i
. You should use let
before it.Here is the code
$.getJSON("servers.json", function(json) {
var servers_available = Object.keys(json.servers).length;
for(let i = 1; i <= servers_available; i++) {
if (json.servers['server'+i].status == 1) {
alert(json.servers['server'+i].svr + " enabled!");
} else {
alert(json.servers['server'+i].svr + " disabled");
}
}
});
You can do that in a simple way by using :
forEach()
on the Object.values()
instead of Object.keys()
svr
and status property of valuelet json = {"name": "Servers Rotation","version": 1.0,"prefix": ".svr","servers": { "server1": {"svr": "01x","status": 1,"type": "all" },"server2": {"svr": "02p","status": 1, "type": "all" }, "server3": { "svr": "03z", "status": 1,"type": "all" } }}
Object.values(json.servers).forEach(({status,svr}) => {
status === 1 ? alert(svr + " enabled!") : alert(svr + " disabled")
})
Upvotes: 1
Reputation: 12152
Use bracket notation
var json={
"name": "Servers Rotation",
"version": 1.0,
"prefix": ".svr",
"servers": {
"server1": {
"svr": "01x",
"status": 1,
"type": "all"
},
"server2": {
"svr": "02p",
"status": 1,
"type": "all"
},
"server3": {
"svr": "03z",
"status": 1,
"type": "all"
}
}
}
var servers_available = Object.keys(json.servers);
for(i = 1; i <=servers_available.length; i++) {
var a='server'+i;
if (json.servers[a].status == 1) {
alert(json.servers[a].svr + " enabled!");
} else {
alert(json.servers[a].svr + " disabled");
}
}
Upvotes: 0
Reputation: 2900
try out this one
$.getJSON("servers.json", function(json) {
var servers_available = Object.keys(json.servers).length;
for(i = 1; i <= servers_available; i++) {
if (json.servers["server"+i].status == 1) {
alert(servers_prefix+i.svr + " enabled!");
} else {
alert(servers_prefix+i.svr + " disabled");
}
}
});
Upvotes: 0