Как получить ключевой дочерний ключ JSON путем динамического игнорирования его родительского ключа? - PullRequest
0 голосов
/ 08 мая 2018

Код:

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,

Вывод My Desire:

я хочу получить все дочерние ключи из class и address, которые id, name, postcode, city, state, country в for each loop, и использовать их для сопоставления с matchData, который у меня есть объявлено.

Как это заархивировать?

Примечание: (Пожалуйста, обратитесь к JSON ниже)

  1. Я всегда хотел получить корневой ключ Children , например, файл JSON ниже. Я хотел бы получить code, number, first, last, postcode, city, state, country и использовать их для сопоставления.

  2. Я НЕ пытаюсь получить Данные , такие как abc, 123456, Programming, Class, 30100, IPOH, PERAK, MALAYSIA, но я хотел получить ключ , code, number, first, last, postcode, city, state, country.

Пример JSON для моей заметки

{
    "class": {
        "id": {
            "code": "abc",
            "number": "123456"
        },
        "name": {
            "first": "Programming",
            "last": "Class"
        },
    },
    "address": {
        "postcode": "30100",
        "city": "IPOH",
        "state": "PERAK",
        "country": "MALAYSIA"
    }
}

1 Ответ

0 голосов
/ 08 мая 2018

Вы можете автоматически найти вложенные свойства корневых объектов, используя следующее:

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);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...