【问题标题】:How to loop through JSON object that is array of objects?如何遍历作为对象数组的 JSON 对象?
【发布时间】:2021-10-18 18:38:11
【问题描述】:

我只需要通过这个 JSON 对象 (peopleData) 的 id 来检索一个对象。当我做typeof peopleData 时,它返回对象。当我尝试执行typeof peopleData[0](将此对象视为数组,因为它有括号作为开始和结束元素)时,它返回undefined。如果此 JSON 对象是一个在我尝试获取该数组的特定元素时返回“未定义”的数组,我如何遍历所有对象以找到合适的对象?我不知道如何枚举或解构这个对象,因为它是一个数组。

这是我收到的 JSON 的前几行(我更改了值,但这无关紧要。我主要强调开头的括号)。这是我从 GitHub 上的原始形式复制的原始 JSON 对象:

[{
    "id": "237856238235",
    "ip_address": "3423423.42.42.4",
    "ssn": "123133231",
    "date_of_birth": "3123123",
    "address": {
        "home": {
            "street_number": "231231",
            "street_name": "ef2ef23",
            "street_suffix": "8i6rth2",
            "city": "wefwdfwef"
            "state": "affwefwfww",
            "zip": "wefsdfbghyj"
        },
        "work": {
            "street_number": "wefgwegwe",
            "street_name": "wefwefwf",
            "street_suffix": "wsfaf",
            "city": "aefaef",
            "state": "afaef",
            "zip": "aefaef"
        }
    }
}, {
    "id": "fwefewf",
    "ip_address": "fwefwf",
    "ssn": "wfwef",
    "date_of_birth": "wefwef",
    "address": {
        "home": {
            "street_number": "efwef",

我之前用这个确切的数据做过这个,当我只使用一个小函数循环遍历数组的每个元素时它就起作用了,但我不知道为什么它现在不起作用。

【问题讨论】:

  • 你解析了 JSON 吗? JSON.parse(<my_json_here>)developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…
  • 您显示的是无效的 JSON,因为它在嵌套对象的中间被切断。确保这是您在浏览器中收到的内容。仅仅因为这就是 GitHub 显示的内容并不意味着它不会在此过程中的某个地方受到破坏......
  • @HereticMonkey 我说这只是最上面的部分。我只复制了这么多作为示例以在问题中显示。我正在使用 Axios 获取托管在 github 上的 JSON 文件。
  • @S.Ramjit 我之前已经这样做了,无需解析,这里解析给我一个错误。
  • 您可以编辑您的帖子以包含您从中提取数据的 github 链接吗?作为@HereticMonkey,可能是您的JSON格式错误,或者您实际上没有返回JSON字符串而是数组/对象

标签: javascript arrays json


【解决方案1】:

你可以使用你想要的 id 过滤器。

const data = [{
    "id": "237856238235",
    "ip_address": "3423423.42.42.4",
    "ssn": "123133231",
    "date_of_birth": "3123123",
    "address": {
      "home": {
        "street_number": "231231",
        "street_name": "ef2ef23",
        "street_suffix": "8i6rth2",
        "city": "wefwdfwef",
        "state": "affwefwfww",
        "zip": "wefsdfbghyj"
      },
      "work": {
        "street_number": "wefgwegwe",
        "street_name": "wefwefwf",
        "street_suffix": "wsfaf",
        "city": "aefaef",
        "state": "afaef",
        "zip": "aefaef"
      }
    }
  },
  {
    "id": "fwefewf",
    "ip_address": "fwefwf",
    "ssn": "wfwef",
    "date_of_birth": "wefwef",
    "address": {
      "home": {
        "street_number": "efwef",
        "street_name": "ef2ef23",
        "street_suffix": "8i6rth2",
        "city": "wefwdfwef",
        "state": "affwefwfww",
        "zip": "wefsdfbghyj"
      },
      "work": {
        "street_number": "wefgwegwe",
        "street_name": "wefwefwf",
        "street_suffix": "wsfaf",
        "city": "aefaef",
        "state": "afaef",
        "zip": "aefaef"
      }
    }
  }]
let result = data.filter(obj => obj.id === "237856238235")
//console.log(result)
console.log(result[0])

【讨论】:

  • 如果 data 像 OP 所说的那样作为对象而不是数组返回?
  • OP 说它是一个数组。 ...“我不知道如何枚举或解构这个对象,因为它是一个数组”...应该在他的问题中提及并发布他得到的确切数据。
  • “当我执行typeof peopleData 时,它会返回对象。”在回答之前在 cmets 中询问澄清问题。
  • typeof 数组返回对象。请在评论之前检查一下
【解决方案2】:

我错误地诊断出我的问题。它与 JSON 数据无关。使用 Axios 获取数据时忘记使用await。非常感谢您为帮助我所做的任何努力。

【讨论】:

  • 在这种情况下,最好将问题关闭为不可重现
猜你喜欢
  • 1970-01-01
  • 2015-03-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-07
  • 2019-06-07
  • 1970-01-01
相关资源
最近更新 更多