【问题标题】:Check whether a value exists in JSON object检查 JSON 对象中是否存在值
【发布时间】:2011-06-17 10:25:37
【问题描述】:

我有下一个 JSON:

var JSONObject = {"animals": [{name:"cat"}, {name:"dog"}]};

了解“dog”值是否存在于 JSON 对象中的最佳方法是什么?

谢谢。

解决方案 1

var JSONObject = {"animals": [{name:"cat"}, {name:"dog"}]};
...
for (i=0; i < JSONObject.animals.length; i++) {
    if (JSONObject.animals[i].name == "dog")
        return true;
}
return false;

解决方案 2 (JQuery)

var JSONObject = {"animals": [{name:"cat"}, {name:"dog"}]};
...
$.map(JSONObject.animals, function(elem, index) {
 if (elem.name == "dog") 
     return true;
});
return false;

解决方案 3(使用 some() 方法)

function _isContains(json, value) {
    let contains = false;
    Object.keys(json).some(key => {
        contains = typeof json[key] === 'object' ? 
        _isContains(json[key], value) : json[key] === value;
        return contains;
    });
    return contains;
}

【问题讨论】:

    标签: javascript json


    【解决方案1】:
    var JSON = [{"name":"cat"}, {"name":"dog"}];
    

    JSON 变量是指具有一个名为“名称”的属性的对象数组。 我不知道最好的方法,但这就是我要做的?

    var hasMatch =false;
    
    for (var index = 0; index < JSON.length; ++index) {
    
     var animal = JSON[index];
    
     if(animal.Name == "dog"){
       hasMatch = true;
       break;
     }
    }
    

    【讨论】:

    • JSON refers to an array of object with one property called "name",你是怎么得出这个结论的?
    • @JohnP OP 将JSON 定义为一个对象数组。
    • @Casey @Vijay 道歉,我以为您在谈论 JSON(定义)而不是代码中的变量 ^_^
    【解决方案2】:

    检查单个级别的值

    const hasValue = Object.values(json).includes("bar");
    

    检查多级值

    function hasValueDeep(json, findValue) {
        const values = Object.values(json);
        let hasValue = values.includes(findValue);
        values.forEach(function(value) {
            if (typeof value === "object") {
                hasValue = hasValue || hasValueDeep(value, findValue);
            }
        })
        return hasValue;
    }
    

    【讨论】:

      【解决方案3】:

      以下函数可用于检查 JSON 中任何级别的值

      function _isContains(json, value) {
          let contains = false;
          Object.keys(json).some(key => {
              contains = typeof json[key] === 'object' ? _isContains(json[key], value) : json[key] === value;
               return contains;
          });
          return contains;
       }
      

      然后检查 JSON 是否包含该值

      _isContains(JSONObject, "dog")
      

      看到这个小提琴:https://jsfiddle.net/ponmudi/uykaacLw/

      这里提到的大多数答案都是按“名称”键进行比较的。 但无需关心密钥,只需检查 JSON 是否包含给定值即可。这样该函数就可以用于查找任何值,而与键无关。

      【讨论】:

      • 有趣的方法,我将其添加到解决方案中。
      • 可爱 :) 正是我所需要的
      【解决方案4】:

      为什么不JSON.stringify.includes()

      您可以通过将 JSON 对象转换为字符串并检查字符串来轻松检查其是否包含值。

      console.log(JSON.stringify(JSONObject).includes("dog"))
      --> true
      

      编辑:确保检查.includes() 的浏览器兼容性,并且仅当知道键名不是是搜索值时才应使用此方法。

      【讨论】:

      • 小心使用这种方法,因为它会检查它的全部使用情况,并在不应该的情况下返回 true - 例如:在 ['10'] 的数组中搜索 1 会当数组不包含 1 时返回轮次。
      • @heady12 问题上下文是针对此问题中的特定单词“狗”。此外,我们不是在数组中搜索,而是在 JSON 对象中搜索,并且根据答案,具有一致的键名(在本例中为“名称”)。
      【解决方案5】:

      你可以改进the answer from Ponmudi VN:

      • 短代码
      • 寻找

      看到这个小提琴:https://jsfiddle.net/solarbaypilot/sn3wtea2/

      function _isContains(json, keyname, value) {
      
      return Object.keys(json).some(key => {
              return typeof json[key] === 'object' ? 
              _isContains(json[key], keyname, value) : key === keyname && json[key] === value;
          });
      }
      
      var JSONObject = {"animals": [{name:"cat"}, {name:"dog"}]};
      
      
      document.getElementById('dog').innerHTML = _isContains(JSONObject, "name", "dog");
      document.getElementById('puppy').innerHTML = _isContains(JSONObject, "name", "puppy");
      

      【讨论】:

        【解决方案6】:
        var JSONObject = {"animals": [{name:"cat"}, {name:"dog"}]};
        
         var Duplicate= JSONObject .find(s => s.name== "cat");
                if (typeof (Duplicate) === "undefined") {
                   alert("Not Exist");
                   return;
                } else {
                    if (JSON.stringify(Duplicate).length > 0) {
                        alert("Value Exist");
                        return;
                    }
                }
        

        【讨论】:

        • 欢迎来到 SO!请始终在回答中描述您在做什么。它应该被更新或删除。在提供更多答案之前阅读How to answer ^^
        • 欢迎来到 Stack Overflow!虽然这段代码 sn-p 可以解决问题,但including an explanation 确实有助于提高帖子的质量。请记住,您正在为将来的读者回答问题,而这些人可能不知道您的代码建议的原因。也请尽量不要用解释性的 cmets 挤满你的代码,这会降低代码和解释的可读性!
        【解决方案7】:

        此示例将您的 JSON 转换为正确的格式并进行存在性检查。为了方便,我使用 jquery。

        http://jsfiddle.net/nXFxC/

        <!-- HTML -->
        <span id="test">Hello</span><br>
        <span id="test2">Hello</span>
        
        //Javascript
        
        $(document).ready(function(){
            var JSON = {"animals":[{"name":"cat"}, {"name":"dog"}]};
        
        if(JSON.animals[1].name){      
        $("#test").html("It exists");
        }
        if(!JSON.animals[2]){       
        $("#test2").html("It doesn't exist");
        }
        });
        

        【讨论】:

          【解决方案8】:

          我认为这是最好最简单的方法:

          $lista = @()
          
          $lista += ('{"name": "Diego" }' | ConvertFrom-Json)
          $lista += ('{"name": "Monica" }' | ConvertFrom-Json)
          $lista += ('{"name": "Celia" }' | ConvertFrom-Json)
          $lista += ('{"name": "Quin" }' | ConvertFrom-Json)
          
          if ("Diego" -in $lista.name) {
              Write-Host "is in the list"
              return $true
          
          }
          else {
              Write-Host "not in the list"
              return $false
          }
          

          【讨论】:

            【解决方案9】:

            因为您要查找的“狗”在数组中,所以您也可以使用filter function,它始终返回一个符合过滤条件的项目数组。
            如果应用的过滤器返回一个空数组,则没有“dog”条目。

            const JSONObject = {"animals": [{name: "cat"}, {name: "dog"}]}; // Your array
            
            const exists = JSONObject.animals.filter(item => item.name === "dog").length > 0;
            console.log("Exists? " + exists); // Exists: true
            

            您还可以计算数组中 dog 存在的次数。

            const JSONObject = {"animals": [{name: "cat"}, {name: "dog"}]}; // Your array
            
            const existsCount = JSONObject.animals.filter(item => item.name === "dog").length;
            console.log("Exists: " + existsCount + " time(s)"); // Exists: 1 time(s)
            

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 2014-01-15
              • 1970-01-01
              • 1970-01-01
              • 2013-12-01
              • 2013-12-23
              • 2022-01-16
              • 1970-01-01
              • 2018-12-23
              相关资源
              最近更新 更多