Проверьте, существует ли значение в объекте JSON - PullRequest
15 голосов
/ 17 июня 2011

У меня есть следующий JSON:

var JSONObject = {"animals": [{name:"cat"}, {name:"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;
}

Ответы [ 6 ]

16 голосов
/ 17 июня 2011
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;
 }
}
5 голосов
/ 18 сентября 2017

Проверка значения одного уровня

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;
}
4 голосов
/ 16 февраля 2017

Функция ниже может использоваться для проверки значения на любом уровне в 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 заданное значение.Так что функцию можно использовать для поиска любого значения независимо от ключа.

0 голосов
/ 13 марта 2019

Вы могли бы улучшить ответ от 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");
0 голосов
/ 17 июня 2011

Этот пример переводит ваш 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");
}
});
0 голосов
/ 17 июня 2011

переберите массив и проверьте его имя.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...