如何检查 JSON 字符串在 JavaScript 中是不是有值?

Posted

技术标签:

【中文标题】如何检查 JSON 字符串在 JavaScript 中是不是有值?【英文标题】:How to check if a JSON string has a value in JavaScript?如何检查 JSON 字符串在 JavaScript 中是否有值? 【发布时间】:2013-08-21 17:07:50 【问题描述】:

有什么方法可以检查 json 字符串是否有值(char 或 string)?示例如下:


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

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

【问题讨论】:

这不是一个字符串,它是一个对象(除了语法错误) 现在是 - 但你的意思是你想看看键“m”是否有值? i ment,它 serach 'm',值不在键中 一个字符串看起来像:var foo = '"firstName": "John"'; 这篇文章可能对你有一些想法:Search a javascript object 【参考方案1】:

使用这个方法,如果你有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;

【讨论】:

你永远不会在嵌入对象之后检查任何键!仅当递归调用为真时才应返回。 它在后续的递归调用中得到检查【参考方案2】:

假设 JSON 对象分配给 var user

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

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

【讨论】:

【参考方案3】:

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

for(props in myObj) 
    if(myObj[props] === "m")  doSomething(); 

【讨论】:

在搜索值在嵌入对象中的情况下会失败。【参考方案4】:

可能是这样的?

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!");

【讨论】:

【参考方案5】:

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

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");

注意:如果要搜索密钥,请检查 this post

【讨论】:

以上是关于如何检查 JSON 字符串在 JavaScript 中是不是有值?的主要内容,如果未能解决你的问题,请参考以下文章

如何在javascript中执行if语句来检查JSON数组是不是为空?

检查字符串是不是是 Typescript 中的有效 JSON

如何检查获取的响应是不是是javascript中的json对象

如何检查 json 是不是包含 JavaScript 中的值?

如何在 Javascript 中比较字符串和布尔值?

如何使用javascript创建不自动完成的搜索来检查json文件中是不是存在内容