在JavaScript中重新格式化JSON(Re

编程入门 行业动态 更新时间:2024-10-21 18:30:45
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; } 
  
 

更多推荐

本文发布于:2023-07-17 07:42:00,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1141103.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:JavaScript   JSON

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!