【问题标题】:Go through a json data struture and check keys遍历一个 json 数据结构并检查键
【发布时间】:2021-12-14 13:57:08
【问题描述】:

我正在尝试检查文件中的多个制表符分隔的单词并检查键是否在结构中(json): json 对象如下所示:

[
  {
    "Name" : "Cypress Upload 1", 
    "Description" : "Cypress upload descrition 1"
  },
  {
    "Name" : "Cypress Upload 2",
    "Description" : "Cypress upload descrition 2"
  }
]

代码如下所示:

cy.readFile(uploadPathFile).then((jData) => {
      cy.log(jData[0].Name);
      const objLn = Object.keys(jData).length;
      cy.get('@LASTDOWNLOADEDFILE').then((downFile) => {
        cy.readFile(downFile as unknown as string).then((txt) => {
          const lines = (txt as string).split('\t');
          for (let o = 0; o < objLn; o++) {
            for (let i = 0; i < lines.length; i++) {
              cy.log(`Key ${lines[i]}  ${jData[o].Name}`);
              if (jData[o].hasOwnProperty(lines[i])) {
                cy.log(`Found Key ${lines[i]}`);
              }
            }
          }
        });
      });
    });

第一个日志:在位置 0 处为我提供 Name 键的正确值

18 log  Cypress Upload 1

第二个日志列出了制表符分隔文件中的所有名称:

...
21 log Key "ID" Cypress Upload 1
22 log Key "Name" Cypress Upload 1
23 log Key "Synonym 1" Cypress Upload 1
...

但它不显示找到的键,即使“名称”在那里并且 jData[0].Name 给出了一个值!为什么带有“if (jData[o].hasOwnProperty(lines[i])) {”的行永远不会正确。我也试过“if (jData[o][lines[i]]) {

【问题讨论】:

    标签: javascript json cypress


    【解决方案1】:

    好的,找到问题了:

    下载的文件在键周围包含撇号。您可以在第二个日志中看到这一点。删除它们

    const strippedKy = lines[i].substring(1).slice(0,-1)  
    

    解决了问题! 函数 hasOwnProperty 也不是必需的。一个简单的

    if ( jData[o][strippedKy] ) {
    

    会的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-04-06
      • 1970-01-01
      • 2019-07-20
      • 2021-03-08
      • 2021-02-12
      • 1970-01-01
      相关资源
      最近更新 更多