【问题标题】:How to check for one JSON object being present in another如何检查一个 JSON 对象是否存在于另一个中
【发布时间】:2015-07-28 15:30:08
【问题描述】:

我在 JSON (data.json) 中有两组数据,如下所示:

UP = [{"password": "jhonjhon", "username":"jhon"}, {"password": "juliejulie", "username":"julie"}, {"password": "blakeblake", "username":"blake"}];

还有

Admins = '[{"Admin":"jhon"}, {"Admin":"julie"}]';

我有一个用户将用来登录的 HTML 表单。

<html>
<body>

    <form name="myForm" onsubmit="finalCheck()">
        UserName<input type="text" id="uid" value="UserId"/>
        UserPassword<input type="password" id="pwd" value="UserPwd"/>
        <input type="submit"/>
    </form>
</body>
    <script src="data.json"></script>
    <script src="checking.js"></script>
</html>

单击提交按钮时,我想首先检查输入的用户名(存储在 var 中,例如 x)是否属于我的 JSON 文件中的 Admins 列表.例如:如果xjhon 我想知道JSONAdmins 中是否存在相同的jhon

JavaScript 目前为:

function finalcheck(){
    var x = document.forms["myForm"]["uid"].value;
    var y = document.forms["myForm"]["pwd"].value;
}

非常感谢您对 JavaScript 的帮助!

【问题讨论】:

  • 安全 切勿将密码放在用户可访问的位置,始终使用后端验证,始终对密码进行编码。您的方法非常非常不安全。我总是可以检查 JSON 源文件,看看我可以使用哪些登录名作为管理员登录。
  • @justinas 是的,我将对密码使用后端验证,但为了确保我对 JSON 有清晰的了解,我正在尝试这个示例。

标签: javascript html json


【解决方案1】:

要检查password 是否与用户在 JSON 中的相同,您必须循环该 JSON 数组并检查值:

for (var i = 0; i < UP.length; i++) {
   if (UP[i].username == x && UP[i].password == y) {
      for (var j = 0; j < Admins.length; j++) {
          if (Admin[i].Admin == x) {
             //It's correct logins, do something
          }
      }
   }
}

安全


永远不要将密码放在用户可访问的位置,始终使用后端验证,始终对密码进行编码。您的方法非常非常不安全。我总是可以检查 JSON 源文件并查看我可以以管理员身份登录的登录名

【讨论】:

    【解决方案2】:

    您应该遍历 JSON 对象并检查 uid 是否存在。

    如果x 存在于Admins 中,adminFlag 将设置为 true。

    试试下面给出的代码:

    function finalCheck(){
        var adminJSON = JSON.parse(Admins), // since Admins is string, parse to Json first
            length = adminJSON.length,
            x = document.forms["myForm"]["uid"].value,
            y = document.forms["myForm"]["pwd"].value,
            adminFlag = false;
    
            // for loop to find admin is present or not
            for(var i = 0; i < length; i++){
                if(adminJSON[i].Admin == x){
                   adminFlag = true;
                   break;
                }
            }
    }
    

    【讨论】:

    • if(adminJSON[i] == x){ 应该是 if(adminJSON[i].Admin== x){
    • 这工作得很好!非常感谢你的帮助!干杯! :)@Utkarsh
    • 是的,丹东说的是对的。尽管即使我只是尝试了 Utkarsh 的建议,我也得到了相同的输出。以及为什么会发生这种情况? @丹顿
    • 我猜应该不能正常工作。您能否创建一个 jsfiddle 并分享链接
    • 好吧,不,我只是交叉检查了 Utkarsh 最初写的内容不起作用。您的建议是正确的@Danton 感谢您的帮助,Utkarsh!干杯! :)
    【解决方案3】:

    我想这个任务是为了学习目的。请不要在生产中这样做。您可以使用此示例代码。有很多更智能的解决方案,但我认为这将有助于您了解基础知识。

    var UP = [{"password": "jhonjhon", "username":"jhon"}, {"password": "juliejulie", "username":"julie"}, {"password": "blakeblake", "username":"blake"}];
    var ADMINS = [{"Admin":"jhon"}, {"Admin":"julie"}];
    
    function finalcheck()
    {
     var x = 'jhon';
     var y = 'jhonjhon';
    
     for(var i = 0; i < UP.length; i++)
     {
       if (UP[i].password == x && UP[i].username == y)
       {
         console.log(y + ' has access!');
         for (var j = 0; j < ADMINS.length; j++) {
           if (ADMINS[j].Admin == y)
           {
             console.log(y + ' is Admin');
           }
         }
       } 
     }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-11-26
      • 2016-06-05
      • 2020-11-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多