#javascript #jquery #json
#javascript #jquery #json
Вопрос:
прежде чем я объясню свой вопрос, я приведу здесь свой 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"
}
}
}
Теперь я обращаюсь к этому JSON и пытаюсь создать цикл для проверки состояния всех серверов (server1, server2, server3) на соответствие номеру 1.
Если состояние сервера [num] равно 1, то сервер включен.
$.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");
}
}
});
Но я получаю NaN
ответ в виде предупреждения.
Что я делаю не так? Вы можете мне помочь? Спасибо.
Комментарии:
1. Просто подсказка, чтобы лучше видеть, что происходит. Вы можете ввести debugger; в строке выше var servers_available = … а затем нажмите F12, чтобы открыть инструменты разработчика и обновить вашу страницу. Теперь вы сможете пошагово просмотреть свой код и посмотреть, что происходит.
Ответ №1:
Здесь вы допускаете три ошибки:
- Вы используете точечную нотацию
json.servers.server i.status
. Здесь вы должны использовать обозначение в скобках.то естьjson.servers['server' i].status
- Вы используете
servers_prefix
которыйundefined
- Вы используете глобальную переменную
i
. Вы должны использоватьlet
перед этим.
Вот код
$.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");
}
}
});
Вы можете сделать это простым способом, используя :
forEach()
наObject.values()
вместоObject.keys()
- Используйте деструктурирование параметров, чтобы получить выход
svr
и присвоить свойству status значение - Используйте тернарные операторы вместо выражений if else
let 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")
})
Комментарии:
1. Здравствуйте, я получаю эту ошибку сейчас:
Uncaught SyntaxError: Unexpected token [
2. Это потому, что он использовал как точечную, так и скобочную нотацию. Теперь это отредактировано.
3. Теперь это работает! Большое вам спасибо, я отмечу как правильный ответ через пять минут
Ответ №2:
попробуйте эту
$.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");
}
}
});
Ответ №3:
Используйте обозначение в скобках
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");
}
}