从 JavaScript 中的 json 获取值

Getting values from json in JavaScript

如果我有这样的 json:

{
    "dcf93893d83e4f28953f140b9cba1963":{
       "foo":{
          "client":"127.0.0.1",
          "id":"31971",
          "start time":1654131724.160335
       },
       "bar":{
          "client":"127.0.0.1",
          "id":"23456",
          "start time":1654131900.997766
       }
    }
 }

我想出了如何像这样循环它:

for (var key in json) {
    if (json.hasOwnProperty(key)) {
        console.log(json[key])
    }
}

如何遍历每个子元素(在本例中为 foo 和 bar)然后获取一个键,例如 id?

客户端、id 和开始时间是唯一已知的键名

预期输出:

31971
23456

编辑:json 来自 fetch:

setInterval(function () {
    fetch(<url>)
        .then(function (response) {
            return response.json();
        })
        .then(function (json) {
            for (var key in json) {
                if (json.hasOwnProperty(key)) {
                    console.log(json[key])
                }
            }
        })
}, 2000);

再做一个循环并通过键名获取内部值:

const json = {
    "dcf93893d83e4f28953f140b9cba1963":{
       "foo":{
          "client":"127.0.0.1",
          "id":"31971",
          "start time":1654131724.160335
       },
       "bar":{
          "client":"127.0.0.1",
          "id":"23456",
          "start time":1654131900.997766
       }
    }
 }
 
for (var key in json) {
    if (json.hasOwnProperty(key)) {
        //console.log(json[key])
        
        for(var key2 in json[key]) {
          console.log(json[key][key2]["id"])
        }
    }
}

你必须在每个循环中循环。并将每个 id 保存到一个数组中。

var ids = []
for (var key in json) {
    if (json.hasOwnProperty(key)) {
        for(var obj in json[key]) {
           if (obj.id) ids.push(obj.id)
        }
    }
}

无需迭代,您可以使用 Object.values(), and map those accordingly using flatMap() and map():

获取对象的值

const data = {
  "dcf93893d83e4f28953f140b9cba1963": {
    "foo": {
      "client": "127.0.0.1",
      "id": "31971",
      "start time": 1654131724.160335
    },
    "bar": {
      "client": "127.0.0.1",
      "id": "23456",
      "start time": 1654131900.997766
    }
  }
};

const result = Object.values(data)
                     .flatMap(v => Object.values(v)).map(({id}) => id);

console.log(result);