4

有什么方法可以检查 json 字符串是否具有值(字符或字符串)?这是示例:

{
    "firstName": "John",
    "lastName": "Smith",
    "age": 25,
    "address": {
        "streetAddress": "21 2nd Street",
        "city": "New York",
        "state": "NY",
        "postalCode": 10021
    }
}

我必须检查这个 json 是否有“m”。它必须知道“m”存在于一个值中。

4

5 回答 5

9

使用这种方法,如果你有 json 字符串,你可以json = $.parseJSON(jsonStr)用来解析 -

function checkForValue(json, value) {
    for (key in json) {
        if (typeof (json[key]) === "object") {
            return checkForValue(json[key], value);
        } else if (json[key] === value) {
            return true;
        }
    }
    return false;
}
于 2013-08-21T17:15:30.910 回答
4

假设 JSON 对象分配给 var user

if(JSON.stringify(user).indexOf('m') > -1){  }

抱歉,在阅读新评论后,我发现您只是想查看字符串是否仅在键中。我以为你在整个 JSON 中寻找一个“m”(作为一个字符串)

于 2013-08-21T17:16:02.563 回答
1

可能是这样的吗?

function parse_json(the_json, char_to_check_for)
{
    try {
        for (var key in the_json) {
            var property = the_json.hasOwnProperty(key);
            return parse_json(property);
        }
    }
    catch { // not json
        if (the_json.indexof(char_to_check_for) !=== -1)
        {
             return true;
        }
        return false;

    }
}

if (parse_json(my_json,'m'))
{
    alert("m is in my json!");
}
于 2013-08-21T17:18:41.613 回答
1

假设您纠正了对象语法,您可以使用循环遍历对象中的属性for

for(props in myObj) {
    if(myObj[props] === "m") { doSomething(); }
}
于 2013-08-21T17:16:59.257 回答
1

如果查看一层而不是子字符串:

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

如果在一层中查找子字符串,并且没有对象作为值:

const hasChar = Object.values(obj).join("").includes("m");

如果在多层中查找子字符串:

const list = Object.values(a);
for (let i = 0; i < list.length; i++) {
    const object = list[i];
    if (typeof object === "object") {
        list.splice(i, 1); // Remove object from array
        list = list.concat(Object.values(object)); // Add contents to array
    }
}
// It is important to join by character not in the search substring
const hasValue = list.join("_").includes("m");

注意:如果要搜索密钥,请查看此帖子

于 2017-09-18T05:15:22.103 回答