2013-08-21 87 views
3

是否有任何方法來檢查JSON字符串是否有值(字符串或字符串)?這裏是例子:如何檢查JSON字符串在JavaScript中是否有值?

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

我必須檢查,如果這個json有「m」。它必須知道「m」存在於一個值中。

+0

並且這是是一個字符串,它是一個對象(除了語法錯誤) – dc5

+2

它是一個json字符串。 –

+0

現在它是 - 但你的意思是你想看看是否有關鍵「m」的價值? –

回答

5

使用這種方法,如果你有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; 
} 
+0

你永遠不會檢查嵌入對象後的任何鍵!只有在遞歸調用爲真時才應該返回。 – HBP

+0

它在隨後的遞歸調用中被檢查 –

5

假設JSON對象被分配給VAR用戶

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

對不起,在閱讀新評論我看到你只看到字符串是否只在一個鍵中。我還以爲你正在尋找在整個JSON的「M」(字符串)

1

假設你得到你的對象語法修正,你可以通過使用for迴路中的對象的屬性循環:

for(props in myObj) { 
    if(myObj[props] === "m") { doSomething(); } 
} 
+0

在搜索值位於嵌入對象的情況下,這會失敗。 – HBP

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!"); 
} 
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"); 
相關問題