代码之家  ›  专栏  ›  技术社区  ›  I am a Student

Javascript-如何通过动态忽略其父键来获取JSON根子键?

  •  0
  • I am a Student  · 技术社区  · 6 年前

    代码:

    const jsonFile = require("data.json")
    
    // Get the KEY of the JSON but not the Data (failed to get Root Children Key, only get the Parent Key)
    var getKey = Object.keys(jsonFile);
    
    // Declared for do matching purpose
    var matchData = "country"; 
    
    // using for each loop and try to get all the key to do matching
    for(var count in getKey){
    
        // get the key and do matching
        if(getkey[count]==matchData){
            //Do Something  
        }
    
    }
    

    JSON文件

    {
     "class" : {
       "id" : "abc123456",
       "name" : "Programming Class"
     },
     "address" : {    
       "postcode" : "30100",
       "city" : "IPOH",
       "state" : "PERAK",
       "country" : "MALAYSIA"
     }
    }
    

    我试图通过动态忽略其父键来获取JSON根子键。

    对于本例,我使用 for each loop 并尝试遍历JSON文件并获取其所有密钥,但是我只能获取 父密钥 属于 class address ,则,

    我的愿望输出:

    我想要的是 子项键 属于 住址 哪些是 id, name, postcode, city, state, country 对于每个回路 并使用它们与 matchData 我已经声明了。

    如何存档?

    注:(请参考下面的JSON)

    1. 我一直想得到 根子项键 ,例如下面的JSON文件。我会想 code, number, first, last, postcode, city, state, country 并使用它们进行匹配。

    2. 我是 正在尝试获取 数据 例如 abc, 123456, Programming, Class, 30100, IPOH, PERAK, MALAYSIA 但我想得到的是 钥匙 ,则, 代码、编号、第一个、最后一个、邮政编码、城市、州、国家

    我的笔记的JSON示例

    {
        "class": {
            "id": {
                "code": "abc",
                "number": "123456"
            },
            "name": {
                "first": "Programming",
                "last": "Class"
            },
        },
        "address": {
            "postcode": "30100",
            "city": "IPOH",
            "state": "PERAK",
            "country": "MALAYSIA"
        }
    }
    
    1 回复  |  直到 6 年前
        1
  •  0
  •   fubar    6 年前

    可以使用以下命令自动查找根对象的嵌套特性:

    var json = {
        "class": {
            "id": {
                "code": "abc",
                "number": "123456"
            },
            "name": {
                "first": "Programming",
                "last": "Class",
                "code": "234567"
            },
        },
        "address": {
            "postcode": "30100",
            "city": "IPOH",
            "state": "PERAK",
            "country": "MALAYSIA"
        }
    };
    
    function parseKeys(keys, obj) {
      return Object.keys(obj).reduce(function (keys, key) {
        if (typeof obj[key] !== 'object') {
          return keys.concat(key);
        }
        
        return parseKeys(keys, obj[key]);
      }, keys);
    }
    
    // Keys with duplicates
    var duplicateKeys = parseKeys([], json);
    
    // Remove duplicates
    var uniqueKeys = Array.from(new Set(duplicateKeys));
    
    console.log(duplicateKeys, uniqueKeys);