0

在我解释我的问题之前,我将把我的 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 匹配。

如果 server[num] status 等于 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了警报响应。

我究竟做错了什么?你能帮助我吗?谢谢你。

4

3 回答 3

1

你在这里犯了三个错误:

  • 您正在使用点符号json.servers.server+i.status。在这里你应该使用括号表示法.iejson.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值的状态属性
  • 使用三元运算符而不是 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")
})

于 2019-03-25T05:10:30.437 回答
0

试试这个

$.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");
    }
}
});
于 2019-03-25T05:14:32.943 回答
0

使用括号表示法

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");
   }
}

于 2019-03-25T05:17:07.627 回答