【问题标题】:TypeScript: find values of certain keys in JSONTypeScript:在 JSON 中查找某些键的值
【发布时间】:2021-12-12 13:02:17
【问题描述】:

我有一个包含大量数据的 JSON,下面是它的一个示例:

{
   "type":"doc",
   "content":[
      {
         "type":"paragraph",
         "content":[
            {
               "text":"this is a simple page, about a simple umbrella.",
               "type":"text"
            }
         ]
      },
      {
         "type":"paragraph",
         "content":[
            {
               "text":"you can use this text to find the umbrella page.",
               "type":"text"
            }
         ]
      },
      {
         "type":"paragraph",
         "content":[
            {
               "text":"do you like it?",
               "type":"text"
            }
         ]
      }
}

我想提取text键的值,不管键在哪里。我正在尝试使用 Object.keys 遍历键,但它只返回顶级键:

for (let x of Object.keys(someJson)) {
    console.log(x);
}

我如何在这个 JSON 中找到 所有text 的值,无论它在 JSON 中的哪个位置?

【问题讨论】:

  • 你需要使用递归

标签: json typescript


【解决方案1】:

您可以使用JSON.stringify技巧,您可以从中截取所有密钥

function find(obj: object, key: string) {
  const ret: any[] = [];
  JSON.stringify(obj, (_, nested) => {
    if (nested && nested[key]) {
      ret.push(nested[key]);
    }
    return nested;
  });
  return ret;
};

...

const o = {
  key: '123',
  a: {
    key: 'hello',
    b: [
      {
        c: {
          key: 123,
        },
      },
    ],
  },
};
it('123', () => {
  console.log(JSON.stringify(find(o, 'key'))); // ["123","hello",123]
});

【讨论】:

    【解决方案2】:

    如果您想要通用 JSON,只需调用此函数并传递您的对象:

    function printText(obj){
        if(Array.isArray(obj)){
            for(const o of obj){
                printText(o);
            }
        }else if(typeof obj === "object"){
            if (obj){
                for(const o of Object.keys(obj)){
                     if(o==="text"){
                          console.log(obj.text);
                     }else{
                          printText(obj[o]);
                     }
                }
            }
        }
    
    }
    

    【讨论】:

      猜你喜欢
      • 2019-01-07
      • 1970-01-01
      • 2017-12-23
      • 2018-03-25
      • 2020-08-22
      • 1970-01-01
      • 2019-12-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多