如何迭代json对象

问题描述 投票:0回答:2

我有以下 json 对象,并尝试使用 jQuery 进行迭代,但它只返回一次迭代。我哪里做得不对?

var data = "{
  "SIEcat4": {
    "3001": {
      "test": "test",
      "test": "test"
    },
    "3300": {
      "test": "test",
      "test": "test"
    }
  },
  "SIEcat5": {},
  "SIEcat6": {},
  "SIEcat13": {
    "3990": {
      "test": "test",
      "test": "test"
    }
  }
}"




$(JSON.parse(data)).each(function(key, value) {
  console.log("test");
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.7.1/jquery.min.js"></script>

jquery object each
2个回答
0
投票

详细说明我的评论

$jQueryCollection.each() 通常用于 jQuery 集合 - 我不会将它用于嵌套对象

$.each 可用于对象,但只能使用一层

您还可以使用相同的引号来包裹对象并引用数据。 JS 中仅在模板文字中或当您转义换行符时才允许换行符。因此,将外部

"
更改为 `(bactick)和

了解如何迭代嵌套对象

最后你的对象是无效的,因为它有多个名称相同的键

这是一个在有效对象上工作的递归迭代器 - 不使用 jQuery,因为不需要它

var data = `{
  "SIEcat4": {
    "3001": {
      "test1": "test",
      "test2": "test"
    },
    "3300": {
      "test1": "test",
      "test2": "test"
    }
  },
  "SIEcat5": {},
  "SIEcat6": {},
  "SIEcat13": {
    "3990": {
      "test1": "test",
      "test2": "test"
    }
  }
}`;

const obj = JSON.parse(data);
const iterateObject = (obj, parentKey = '') => {
  for (let key in obj) {
    if (typeof obj[key] === 'object') {
      iterateObject(obj[key], `${parentKey}${key}.`);
    } else {
      console.log(`${parentKey}${key}: ${obj[key]}`);
    }
  }
};

iterateObject(obj);

// jQuery .each also needs some extra work

$.each(obj,function(key,value) { console.log(key,value)})
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.7.1/jquery.min.js"></script>


-1
投票

在你的问题中,你的 JSON 对象被包裹在字符串中,这是不对的。如果您有对象的字符串表示形式,则必须将其解析为单独的步骤。如果您有一个真正的 JSON 对象,那么您可以使用

Object.keys
来迭代该对象的键。

此外,这根本不需要 jQuery。

以下是如何循环对象中的键和数据

var data = {
  "SIEcat4": {
      "3001": {
          "test": "test",
          "test": "test"
      },
      "3300": {
          "test": "test",
          "test": "test"
      }
  },
  "SIEcat5": {},
  "SIEcat6": {},
  "SIEcat13": {
    "3990": {
        "test": "test",
        "test": "test"
    }
  }
};

Object.keys(data).forEach(key => {
  console.log(key, '=>', data[key]);
});

如果您的数据是 JSON 数据的字符串表示形式,您可以执行与上面完全相同的操作,但您需要先对其运行

JSON.parse
以从字符串中获取数据。

var dataAsString = `{
  "SIEcat4": {
      "3001": {
          "test": "test",
          "test": "test"
      },
      "3300": {
          "test": "test",
          "test": "test"
      }
  },
  "SIEcat5": {},
  "SIEcat6": {},
  "SIEcat13": {
    "3990": {
        "test": "test",
        "test": "test"
    }
  }
}`;

var data = JSON.parse(dataAsString);

Object.keys(data).forEach(key => {
  console.log(key, '=>', data[key]);
});

© www.soinside.com 2019 - 2024. All rights reserved.