检查JSON对象中是否存在值

时间:2011-06-17 10:25:37

标签: javascript json

我有下一个JSON:

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

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

感谢。

解决方案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;
}

9 个答案:

答案 0 :(得分:15)

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

JSON变量引用具有一个名为“name”的属性的对象数组。 我不知道最好的方法,但这就是我的工作?

var hasMatch =false;

for (var index = 0; index < JSON.length; ++index) {

 var animal = JSON[index];

 if(animal.Name == "dog"){
   hasMatch = true;
   break;
 }
}

答案 1 :(得分:5)

检查单个级别的值

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

答案 2 :(得分:4)

下面的函数可用于检查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/

这里提到的大多数答案都是通过&#39; name&#39;键。 但无需关心密钥,只需检查JSON是否包含给定值即可。因此,无论密钥如何,该函数都可用于查找任何值。

答案 3 :(得分:0)

此示例将您的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");
}
});

答案 4 :(得分:0)

您可以改善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");

答案 5 :(得分:0)

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

$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
}

答案 6 :(得分:0)

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

答案 7 :(得分:0)

为什么不JSON.stringify.includes()

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

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

编辑:确保检查浏览器与.includes()的兼容性

答案 8 :(得分:-6)

遍历数组并检查其名称值。