Как получить список сцепленных ключей от json в машинописи - PullRequest
0 голосов
/ 05 ноября 2018

Я знаю, что есть много сообщений о том, как получить ключи от json, но я не нашел своего конкретного случая. Мой вопрос немного более странный. Например, рассмотрим этот JSON:

 {
  "User": {
    "Username": "testuser",
    "Roles": ["Chief", "Other"],
    "Languages": ["it", "en"],
    "IsActive": true,
    "Family": {
        "Mother": "Mary",
        "Father": "Mike"
      }
  },
  "Timestamp": null
}

Мне нужно получить список всех вложенных ключей, например:

User.Usernames
User.Roles
User.Languages
User.IsActive
User.Family.Mother
User.Family.Father
Timestamp

а не

User
Usernames
Roles
Languages
IsActive
Family
Mother
Father
Timestamp

Мне не интересно знать значения каждого ключа. Я не могу найти ключ по значению, потому что он может меняться каждый раз. Код:

Object.keys(myJson)

дает мне только корневые элементы json (в данном случае «User» и «Timestamp»). Я использую машинопись 2.9.2 с Angular 6.

Спасибо.

1 Ответ

0 голосов
/ 05 ноября 2018

Попробуйте это:

let obj ={
  "User": {
    "Username": "testuser",
    "Roles": ["Chief", "Other"],
    "Languages": ["it", "en"],
    "IsActive": true,
    "Family": {
        "Mother": "Mary",
        "Father": "Mike"
      }
  },
  "Timestamp": null
}

var list = [];
getProps(obj);

function getProps(obj, parent=null) {
      for (var props in obj) {

          if (typeof (obj[props]) == "object" && obj[props] !== null && !Array.isArray(obj[props]) ) {
                 getProps(obj[props],props)
          }
          else if (parent !== null) {
                  list.push(parent+"."+props);
          }
          else {
                  list.push(props);
          }
        }
    }

 console.log(list);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...