如何检查节点中嵌套的JSON对象中是否存在密钥?

时间:2016-09-29 06:41:29

标签: json node.js

我已经从浏览器将以下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,但它并没有发挥作用。

4 个答案:

答案 0 :(得分: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 :(得分:0)

我搜索了npms.io并找到了{J}。在JSON.parse之后可以使用的has-any-deep

答案 2 :(得分:0)

一个简单但不是100%万无一失的解决方案是将JSON解析为字符串,只搜索你的密钥:

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,我想这是一个不错的选择。



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




答案 3 :(得分: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;
}