在JavaScript中重新格式化JSON(Re-format JSON in Javascript)
尝试重新格式化API查询的响应,但遇到问题。 试图地图,但没有奏效。
main.data.daily(symbol, 'main', 'json').then(data=> ....);当前响应格式:
'data':{ '2018-03-13': { '1. open': '32.8500', '2. high': '33.3600', '3. low': '32.8500', '4. close': '33.1400', '5. volume': '834894' }, ... }这是所需的格式:
[{ date: '2018-03-13' open: 32.85, high: 33.36, low: 33.85, close: 33.14, volume: 855448 }, ... ]尝试了以下,但没有雪茄:
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'] } });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)Trying to reformat the response from an API query, but running into issues. Attempted map but didn't work.
main.data.daily(symbol, 'main', 'json').then(data=> ....);Current response format:
'data':{ '2018-03-13': { '1. open': '32.8500', '2. high': '33.3600', '3. low': '32.8500', '4. close': '33.1400', '5. volume': '834894' }, ... }This is the desired Format:
[{ date: '2018-03-13' open: 32.85, high: 33.36, low: 33.85, close: 33.14, volume: 855448 }, ... ]Tried the following but no cigar:
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'] } });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)最满意答案
您可以使用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);.as-console-wrapper { max-height: 100% !important; top: 0; }You could reformat your objects by using Object.entries and Object.assign. For getting a new key without leading number and dot, you could take a regular expression which separates the wanted part for a new key.
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);.as-console-wrapper { max-height: 100% !important; top: 0; }
更多推荐
发布评论