我有下一个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;
}
答案 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。
<!-- 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)
遍历数组并检查其名称值。