POST API嵌套JSON解析问题:保留0x键转数组用于MongoDB更新
问题:嵌套JSON解析丢失键值,无法提取第三层数据
从POST API获取嵌套JSON结构数据,需要保留两层以0x开头的键,但现有解析方式要么丢失键值,要么无法访问第三层数据。目标是将所有条目整理为单个数组,用于后续调用函数更新后端MongoDB。
原始数据
{ "0xa0cC4414019471bef0fe0b07a76dA1F7CDc4cCf7": { "0x6f5dabb430572370d63010e5d6a52e39f40e73751e8d49f3e0088d6b76a5dc53": { "chain": "bsc", "soldAmount": 77.91952132935356, "boughtAmount": 7581.592038, "basePrice": 0.010277461638506796, "usdPrice": 0.010277461638506796, "usdSpent": 77.91952132935356, "walletAddress": "0x06f74D2dB8bFbeD7bFa3f809f01D7ad4bdaCd0D0", "whale": false } }, "0x81cAd0ab645A1792F585cE93c5f955Ff3eCC3951": { "0x58601dd284313e72c70987774129659f0f3327354e03dad820ff498ac2bcd980": { "chain": "bsc", "soldAmount": 0.04130355997068365, "boughtAmount": 12006668.37444406, "basePrice": 3.4400517014859345e-09, "usdPrice": 1.1540347696736513e-06, "usdSpent": 13.856112772049464, "walletAddress": "0x52739B1646EBE3879C2592686D10094a3f88D3Aa", "whale": false } } }
当前代码
var importData = req.body; var txsData = []; for (let [tx, value] of Object.entries(importData)) { txsData.push([tx, value]) }
解决方案
通过两层遍历提取所有层级的键和数据,将两层0x开头的键作为字段合并到第三层数据中,最终整理为单个数组:
var importData = req.body; var txsData = []; // 遍历第一层对象,获取第一个0x键和对应二级对象 for (let [contractAddr, txObj] of Object.entries(importData)) { // 遍历二级对象,获取第二个0x键和详情数据 for (let [txHash, detail] of Object.entries(txObj)) { // 合并所有数据,保留两个0x键和详情字段 const item = { contractAddr, txHash, ...detail }; txsData.push(item); } }
处理后txsData数组的每个元素结构示例:
{ "contractAddr": "0xa0cC4414019471bef0fe0b07a76dA1F7CDc4cCf7", "txHash": "0x6f5dabb430572370d63010e5d6a52e39f40e73751e8d49f3e0088d6b76a5dc53", "chain": "bsc", "soldAmount": 77.91952132935356, "boughtAmount": 7581.592038, ... // 其他原有字段 }
之后直接遍历txsData数组,即可逐个调用函数完成MongoDB的更新操作。
内容的提问来源于stack exchange,提问作者plat_winz
相关产品推荐
相关产品推荐

