2016-09-29 50 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; 
} 
相关问题