如何检查节点中嵌套的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”和“revision”不在任何级别的任何地方。

我发现这个,但它不工作。

你需要parsingJSON然后检查数据

 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 } 

我search了npms.io,发现了可以在JSON之后使用has-any-deep

一个简单但不是100%的万无一失的解决scheme将parsingJSONstring,只是search您的密钥:

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

当然,问题是如果在您的JSON中有值匹配'_href''id''version' 。 但是如果你想使用本地JS,我想这是一个很好的select。

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

你可以使用可选的第二个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; }