【问题标题】:Looping through API JSON data in nodejs在nodejs中循环API JSON数据
【发布时间】:2022-01-12 02:32:16
【问题描述】:

下午好,

我得到这样的数据:

{
        "abcxxxx": {
            "a": ["1.91500", "646", "646.000"],
            "b": ["1.91000", "1614", "1614.000"],
            "c": ["1.92000", "311.93866943"],
            "v": ["45819.50257068", "46925.18489136"],
            "p": ["1.95692", "1.95993"],
            "t": [171, 198],
            "l": ["1.88400", "1.88400"],
            "h": ["2.07200", "2.10900"],
            "o": "2.07200"
        },
        "xxabcx": {
            "a": ["2.16900", "190", "190.000"],
            "b": ["2.16500", "1614", "1614.000"],
            "c": ["2.17000", "3.72887356"],
            "v": ["55632.25862374", "61690.32296177"],
            "p": ["2.19382", "2.20956"],
            "t": [180, 219],
            "l": ["2.12200", "2.12200"],
            "h": ["2.33400", "2.37300"],
            "o": "2.33400"
        },
        "xabcxxx": {
            "a": ["288.29000", "13", "13.000"],
            "b": ["285.88000", "11", "11.000"],
            "c": ["296.27000", "0.06730786"],
            "v": ["8.07845659", "9.84300657"],
            "p": ["290.60752", "294.72859"],
            "t": [20, 23],
            "l": ["286.80000", "286.80000"],
            "h": ["300.69000", "318.03000"],
            "o": "295.34000"
        },
        "cbaxxxx": {
            "a": ["0.06590", "34", "34.000"],
            "b": ["0.06570", "1", "1.000"],
            "c": ["0.06630", "0.13952532"],
            "v": ["283.56565705", "449.03574017"],
            "p": ["0.06570", "0.06574"],
            "t": [62, 94],
            "l": ["0.06380", "0.06380"],
            "h": ["0.06630", "0.06630"],
            "o": "0.06450"
        }

实际数据比这个长很多(大约 750 个对象) 我需要能够遍历数据并获取密钥,即 abcxxxx 和来自所述密钥的一些子项。 最好的方法是什么?

提前感谢您的帮助。

【问题讨论】:

  • 如果它是一个普通的 JS 对象,那么它只是 obj['abcxxxx'].a 还是一个字符串?
  • 你能举个例子说明你希望输出的样子吗?您是否想要所有对象,但每个对象的属性都已过滤?
  • 就像@Anatoly 和 Matt Davis 提到的,你能举一个输出的例子和更多的说明吗?
  • 就像@Anatoly 说的那样简单。要获取“来自所述 Key 的一些子项”,请执行 const {key1, key2, key3} = myObj.abcxxxx; console.log(key1, key2, key3);
  • 我想得到的数据应该简单地分配给变量,然后保存到数据库中。所以理想情况下它应该看起来像这样: id = abcxxxx, a = 2.16900, b= 2.16500 只是作为更多信息,没有办法知道即将到来的数据,因为它可能随时发生变化,或者数据将被删除或已添加。

标签: node.js json


【解决方案1】:

我个人认为使用循环看起来更干净:

const data = {
  'abc': {
    'd': ['154', '132', '125'],
    'e': ['1544', '132', '125'],
    'f': ['1524', '1532', '1265']
  },
  'ghi': {
    'd': ['154', '132', '125'],
    'e': ['1544', '132', '125'],
    'k': ['1524', '1532', '1265']
  }
}

const transformedData = {}
for (const [key, innerObject] of Object.entries(data)) {
  const { d, e } = innerObject // Properties to keep
  transformedData[key] = { d, e }
}

console.log(transformedData)

如果你想使用Object.entries(),像这样:

const data = {
  'abc': {
    'd': ['154', '132', '125'],
    'e': ['1544', '132', '125'],
    'f': ['1524', '1532', '1265']
  },
  'ghi': {
    'd': ['154', '132', '125'],
    'e': ['1544', '132', '125'],
    'k': ['1524', '1532', '1265']
  }
}

const transformedDataArray = Object.entries(data).map(([key, innerObject]) => {
  const filteredInnerObject = Object.entries(innerObject).filter(([key, value]) => {
    const propertiesToKeep = ['d', 'e']
    return propertiesToKeep.includes(key)
  })
  return [key, Object.fromEntries(filteredInnerObject)]
})
const transformedDataObject = Object.fromEntries(transformedDataArray)

console.log(transformedDataObject)

虽然我可能会将其提取到 filterSubObjects 函数或类似的东西中。

【讨论】:

    猜你喜欢
    • 2018-09-15
    • 2018-04-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-06
    • 2023-02-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多