2016-09-29 38 views
1

我有以下JSON發送到來自瀏覽器的服務器:如何檢查一個鍵是否存在於節點中的嵌套JSON對象中?

{ 
    "title": "Testing again 2", 
    "abstract": "An example document", 
    "_href": "http://google.com", 
    "tags": [ "person" ], 
    "attributes": [ { 
     "id": 1, 
     "type": "TEXT", 
     "data": "test" 
    } ], 
    "sections": [ { 
     "id": 1, 
     "type": "LIST", 
     "data": [ { 
      "revision": 124, 
      "text": "test" 
     } ] 
    } ] 
} 

我需要確保密鑰「_href」,「ID」和「修訂」是不是在任何地方對象在任何級別。我發現this但它不太合適。

回答

0

我搜索了npms.io,找到了has-any-deep,您可以在JSON.parse的JSON之後使用它。

0

一個簡單但不是100%萬無一失的解決辦法是將JSON解析字符串,並且只需搜索你的鑰匙:

var a = JSON.stringify(JSONObject); 
var occurs = false; 
['"_href"', '"id"', '"version"'].forEach(function(string) { 
if(a.indexOf(string) > -1) occurs = true; 
}); 

課程的問題,就是如果有匹配 '_href',價值觀, 'id''version'在您的JSON。但是如果你想使用原生JS,我想這是一個很好的選擇。

var a = { 
 
    "title": "Testing again 2", 
 
    "abstract": "An example document", 
 
    
 
    "tags": [ "person" ], 
 
    "attributes": [ { 
 
     
 
     "type": "TEXT", 
 
     "data": "test" 
 
    } ], 
 
    "sections": [ { 
 
     
 
     "type": "_href asdad", 
 
     "data": [ { 
 
      
 
      "text": "test" 
 
     } ] 
 
    } ] 
 
}, 
 
    
 
b = { 
 
    "title": "Testing again 2", 
 
    "abstract": "An example document", 
 
    "_href": "http://google.com", 
 
    "tags": [ "person" ], 
 
    "attributes": [ { 
 
     "id": 1, 
 
     "type": "TEXT", 
 
     "data": "test" 
 
    } ], 
 
    "sections": [ { 
 
     "id": 1, 
 
     "type": "LIST", 
 
     "data": [ { 
 
      "revision": 124, 
 
      "text": "test" 
 
     } ] 
 
    } ] 
 
}, 
 
aJson = JSON.stringify(a), 
 
bJson = JSON.stringify(b); 
 

 
var occursa = false, occursb = false; 
 

 
['"_href"', '"id"', '"version"'].forEach(function(string) { 
 
if(aJson.indexOf(string) > -1) { occursa = true}; 
 
}); 
 

 
['"_href"', '"id"', '"version"'].forEach(function(string) { 
 
if(bJson.indexOf(string) > -1) { occursb = true}; 
 
}); 
 

 
console.log("a"); 
 
console.log(occursa); 
 
console.log("b"); 
 
console.log(occursb);

1

你需要解析JSON然後檢查到數據

var str = '{ 
    "title": "Testing again 2", 
    "abstract": "An example document", 
    "_href": "http://google.com", 
    "tags": [ "person" ], 
    "attributes": [ { 
     "id": 1, 
     "type": "TEXT", 
     "data": "test" 
    } ], 
    "sections": [ { 
     "id": 1, 
     "type": "LIST", 
     "data": [ { 
      "revision": 124, 
      "text": "test" 
     } ] 
    } ] 
}'; 
var jsonObj = JSON.parse(str); 

if (typeof jsonObj._href == 'undefined') { 
    // check 
} 
+1

這不會在更深層次上檢查。 – 2016-09-29 07:01:53

0

您可以使用可選的第二個reviver參數JSON.parse此:

function hasBadProp(json) { 
    let badProp = false; 

    JSON.parse(json, (k, v) => { 
    if ([_href", "id", "revision"].includes(k)) badProp = true; 
    return v; 
}); 

return badProp; 
} 
相關問題