当前位置: 首页 > 知识库问答 >
问题:

尝试从Angular 5中的JSON递归获取键值

须景胜
2023-03-14

我想从JSON文件中检索所有键值。例如:

{
 "total_count": 6,
 "incomplete_results": false,
 "items": [
  {
    "url": "https://api.github.com/repos/Samhot/GenIHM/issues/6",
    "id": 293237635,
    "number": 6,
    "title": "Rechercher des documents",
    "user": {
      "login": "Samhot",
      "id": 7148311
 ]
}

我想得到:
[“总计数”、“未完成的结果”、“项目”、“url”、“url”、“编号”、“标题”、“用户”、“登录”、“id”]

我有一个函数,它以可观察的方式返回我的JSON的内容:

  getConfig(): Observable<any> {
    return this.http.get<any>(this.myURL);
  }

之后,使用. map重新格式化数据,以仅获取具有Object.keys()函数的键:

  merge()
  .pipe(
    startWith({}),
    switchMap(() => {
      return this.getConfig();
    }),
    map(data => {
      return Object.keys(data.items[0]);
      }
    )
  )
  .subscribe(data => {
    this.dispo = data;
  });

我的问题是,我只得到了我所说的JSON级别(data.items[0])中的密钥,而没有得到升序或后代。

当然,我可以创建多个请求,但它要求提前知道JSON的结构,我想要的是使其通用。。。

无论JSON的结构如何,我如何才能拥有一个包含所有密钥的数组?

提前谢谢!

共有1个答案

姬庆
2023-03-14

您需要执行如下递归函数:

function getDeepKeys(obj) {
  
    const keys = Object.keys(obj);

  const childKeys = keys
    .map(key => obj[key])
    .map(
      value =>
        Array.isArray(value)
          ? getDeepKeys(value[0])
          : typeof value === "object"
            ? getDeepKeys(value)
            : []
    )
    .reduce((acc, keys) => [...acc, ...keys], []);
  return [...keys, ...childKeys];
}

const obj = {
  total_count: 6,
  incomplete_results: false,
  items: [
    {
      url: "https://api.github.com/repos/Samhot/GenIHM/issues/6",
      id: 293237635,
      number: 6,
      title: "Rechercher des documents",
      user: {
        login: "Samhot",
        id: 7148311
      }
    },
    {
      url: "https://api.github.com/repos/Samhot/GenIHM/issues/6",
      id: 293237635,
      number: 6,
      title: "Rechercher des documents",
      user: {
        login: "Samhot",
        id: 7148311
      }
    }
  ]
};

console.log(getDeepKeys(obj));
 类似资料:
  • 问题内容: 我有不同的表, 目标 是获得每个客户的批准工作流,并以这种方式显示该信息: > 客户| APPROVER1 | APPROVER2 | APPROVER3 | 审批人4 首先,我有一个称为实体的表 注意: 12被分配给数学安德鲁… 308是表示马特·安德鲁是客户的数字 13被分配给John Connor … 308是表示John Connor是CLIENT的数字 由于Math Andr

  • 我用Redis做我在Laravel的缓存。 在我的代码库中,我有一段代码设置了一个缓存值,如下所示: 因此在这一点上,键是,值是,如果我要运行,我自然会得到10。 我一直在试图挖掘内部的原因,我不在此详述,但我试图找到缓存中的所有键,,而这个特定的键在列表中显示为。我做了一点研究,发现门面为这些场景使用了前缀,这对我来说是有意义的。 所以很自然,如果这是Redis的关键字,那么我应该可以这样做:

  • 我试图从以下URL获取json字符串:http://status.mojang.com/check 感谢任何帮助

  • 如何从json响应中获取键“存在”的值?我之前试过 但它不起作用。如果我print_r回应,这就是正在打印的内容: 我当前的代码:

  • 问题内容: 我在JSON数据类型(Postgres 9.3)下以Postgres存储了JSON文档,我需要递归地收集树下的键名。 例如,给定此JSON树 我想提取类似[file1,file2,file3,file3,package1,package2,package3,package4]的内容 基本上只列出了可用于文本搜索索引的键。 我知道我可以使用以下方法在最外面的对象上列出键 而且我知道可以使

  • 我已经创建了一个简单的Spring Web MVC应用程序,该应用程序从酒店API获取json Web响应,但是当我尝试从根节点使用findPath()方法时,我收到错误。我正在使用Jackson Library进行json解析。代码如下: 第3行产生错误。 这是我的网络回复: 错误消息: HTTP 状态 500 - 处理程序处理失败;nested exception is java.lang.N