在Javascript中重新格式化JSON

Joh*_*van 1 javascript

尝试重新格式化API查询的响应,但遇到问题.尝试过地图但没有奏效.

main.data.daily(symbol, 'main', 'json').then(data=> ....);
Run Code Online (Sandbox Code Playgroud)

目前的回复格式:

'data':{
  '2018-03-13':
    { '1. open': '32.8500',
      '2. high': '33.3600',
      '3. low': '32.8500',
      '4. close': '33.1400',
      '5. volume': '834894' 
    },
    ...
 }
Run Code Online (Sandbox Code Playgroud)

这是所需的格式:

[{ 
 date: '2018-03-13'
 open: 32.85, 
 high: 33.36, 
 low: 33.85,
 close: 33.14, 
 volume: 855448
},
...
]
Run Code Online (Sandbox Code Playgroud)

试过以下但没有雪茄:

data.map(val, i, data => {
            return {
                date: i,
                open: val['1. open'],
                high: val['2. high'],
                low: val['3. low'],
                close: val['4. close'],
                volume: val['5. volume']
            }
        });
Run Code Online (Sandbox Code Playgroud)

var data = {
  '2018-03-13': {
    '1. open': '32.8500',
    '2. high': '33.3600',
    '3. low': '32.8500',
    '4. close': '33.1400',
    '5. volume': '834894'
  },
}

data = data.map(val, i, data => {
  return {
    date: i,
    open: val['1. open'],
    high: val['2. high'],
    low: val['3. low'],
    close: val['4. close'],
    volume: val['5. volume']
  }
});
console.log(data)
Run Code Online (Sandbox Code Playgroud)

Nin*_*olz 5

您可以使用Object.entries和重新格式化对象Object.assign.为了获得没有前导数字和点的新密钥,您可以使用正则表达式来分隔新密钥的所需部分.

var data = { '2018-03-13': { '1. open': '32.8500', '2. high': '33.3600', '3. low': '32.8500', '4. close': '33.1400', '5. volume': '834894' }, '2018-03-12': { '1. open': '32.3900', '2. high': '32.8050', '3. low': '32.2800', '4. close': '32.6800', '5. volume': '855448' } },
    result = Object
        .entries(data)
        .map(([date, object]) => Object.assign(
            { date },
            ...Object.entries(object).map(([k, v]) => ({ [k.match(/\w+$/)]: +v })))
        );

console.log(result);
Run Code Online (Sandbox Code Playgroud)
.as-console-wrapper { max-height: 100% !important; top: 0; }
Run Code Online (Sandbox Code Playgroud)