json - 如何从 typescript 中的 json 获取串联键列表

标签 json angular

我知道有很多关于如何从 json 获取 key 的线程,但我没有找到我的具体案例。我的问题有点棘手。 例如,考虑这个 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”)。 我正在使用 typescript 2.9.2 和 Angular 6。

谢谢。

最佳答案

试试这个:

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

关于json - 如何从 typescript 中的 json 获取串联键列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53155560/

相关文章:

javascript - 递归 - 将 Javascript Map 转换为嵌套 JSON 对象

jquery - 跨源请求被阻止 : & Reason: CORS header 'Access-Control-Allow-Origin' missing

javascript - 单击 anchor 元素时页面重新加载

javascript - RxJS 和 Angular HttpClient : How to transform value asynchronously?

angular - 在 Intellij Idea 中为 Angular2 运行 beta TypeScript 编译器

angular - 属性绑定(bind)时 View 文件中 "@"符号的用途是什么?

javascript - Onclick 选择特定的 JSON 数据集

java - Recyclerview 仅显示父对象的最后一项

javascript - DOM 事件详细信息不会在 Angular Click 事件上增加

javascript - 按键值重新排序 Json 数组