检查JSON对象中是否存在值

Iva*_*van 15 javascript json

我有下一个JSON:

var JSONObject = {"animals": [{name:"cat"}, {name:"dog"}]};
Run Code Online (Sandbox Code Playgroud)

知道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;
Run Code Online (Sandbox Code Playgroud)

解决方案2(JQuery)

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

解决方案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;
}
Run Code Online (Sandbox Code Playgroud)

Vij*_*iri 17

var JSON = [{"name":"cat"}, {"name":"dog"}];
Run Code Online (Sandbox Code Playgroud)

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

var hasMatch =false;

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

 var animal = JSON[index];

 if(animal.Name == "dog"){
   hasMatch = true;
   break;
 }
}
Run Code Online (Sandbox Code Playgroud)


Pon*_* VN 7

下面的函数可用于检查 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;
 }
Run Code Online (Sandbox Code Playgroud)

然后检查 JSON 是否包含该值

_isContains(JSONObject, "dog")
Run Code Online (Sandbox Code Playgroud)

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

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


Gib*_*olt 6

检查单个值的水平

const hasValue = Object.values(json).includes("bar");
Run Code Online (Sandbox Code Playgroud)

检查值多级

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;
}
Run Code Online (Sandbox Code Playgroud)


Jas*_*llo 5

为什么不JSON.stringify.includes()

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

console.log(JSON.stringify(JSONObject).includes("dog"))
--> true
Run Code Online (Sandbox Code Playgroud)

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