通过正则表达式从 JSON 中提取和转换

Extract and convert from JSON by Regex

下午好,需要从api接收到的数据中提取出token_dict对象里面的数据,并进行数据转换,例如:

"token_dict": {
  "0x13a637026df26f846d55acc52775377717345c06": {
    "chain": "bsc",
    "decimals": 18,
    "display_symbol": null,
    "id": "0x13a637026df26f846d55acc52775377717345c06",
    "is_core": true,
    "is_verified": true,
    "is_wallet": true,
    "logo_url": "https://static.debank.com/image/bsc_token/logo_url/0x13a637026df26f846d55acc52775377717345c06/8dfc8adee7cc793678ec6d572b4d7e43.png",
    "name": "SpaceY Token",
    "optimized_symbol": "SPAY",
    "price": 1.0733528304908733,
    "protocol_id": "",
    "symbol": "SPAY",
    "time_at": 1621572439
  },
  "0xd9ec19fe88140ac0a3ab5517f8e54a2143599f80": {
    "chain": "bsc",
    "decimals": 18,
    "display_symbol": null,
    "id": "0xd9ec19fe88140ac0a3ab5517f8e54a2143599f80",
    "is_core": null,
    "is_verified": null,
    "is_wallet": false,
    "logo_url": null,
    "name": "Phenomenal Protocol PNM Token",
    "optimized_symbol": "PNM",
    "price": 0,
    "protocol_id": "",
    "symbol": "PNM",
    "time_at": 1651860868
  }
}

转换为这种形式:

"token_dict": [
  {
    "chain": "bsc",
    "decimals": 18,
    "display_symbol": null,
    "id": "0x13a637026df26f846d55acc52775377717345c06",
    "is_core": true,
    "is_verified": true,
    "is_wallet": true,
    "logo_url": "https://static.debank.com/image/bsc_token/logo_url/0x13a637026df26f846d55acc52775377717345c06/8dfc8adee7cc793678ec6d572b4d7e43.png",
    "name": "SpaceY Token",
    "optimized_symbol": "SPAY",
    "price": 1.0733528304908733,
    "protocol_id": "",
    "symbol": "SPAY",
    "time_at": 1621572439
  },
 {
    "chain": "bsc",
    "decimals": 18,
    "display_symbol": null,
    "id": "0xd9ec19fe88140ac0a3ab5517f8e54a2143599f80",
    "is_core": null,
    "is_verified": null,
    "is_wallet": false,
    "logo_url": null,
    "name": "Phenomenal Protocol PNM Token",
    "optimized_symbol": "PNM",
    "price": 0,
    "protocol_id": "",
    "symbol": "PNM",
    "time_at": 1651860868
  }
]

也就是需要在输出端以列表的形式接收到的数据,由于我是在Bubble平台上工作,所以在这方面遇到了一些困难。

首先,请注意正则表达式远不是解决此问题的最佳方法。

实现您的要求的更好方法是使用 Object.keys() 检索 token_dict 中所有唯一 属性 名称的列表,然后使用 map()创建其关联对象值的数组:

Object.keys(data.token_dict).map(k => data.token_dict[k]);

这是一个工作示例:

var data = {token_dict:{"0x13a637026df26f846d55acc52775377717345c06":{chain:"bsc",decimals:18,display_symbol:null,id:"0x13a637026df26f846d55acc52775377717345c06",is_core:!0,is_verified:!0,is_wallet:!0,logo_url:"https://static.debank.com/image/bsc_token/logo_url/0x13a637026df26f846d55acc52775377717345c06/8dfc8adee7cc793678ec6d572b4d7e43.png",name:"SpaceY Token",optimized_symbol:"SPAY",price:1.0733528304908733,protocol_id:"",symbol:"SPAY",time_at:1621572439},"0xd9ec19fe88140ac0a3ab5517f8e54a2143599f80":{chain:"bsc",decimals:18,display_symbol:null,id:"0xd9ec19fe88140ac0a3ab5517f8e54a2143599f80",is_core:null,is_verified:null,is_wallet:!1,logo_url:null,name:"Phenomenal Protocol PNM Token",optimized_symbol:"PNM",price:0,protocol_id:"",symbol:"PNM",time_at:1651860868}}};

var output = Object.keys(data.token_dict).map(k => data.token_dict[k]);
console.log(output);

请注意,这是假设您无法在服务器端更正来自 API 的响应数据格式。这 到目前为止 是解决您的问题的最佳方法。

一个简单的地图函数就足够了

   const data = { "token_dict": {
      "0x13a637026df26f846d55acc52775377717345c06": {
        "chain": "bsc",
        "decimals": 18,
        "display_symbol": null,
        "id": "0x13a637026df26f846d55acc52775377717345c06",
        "is_core": true,
        "is_verified": true,
        "is_wallet": true,
        "logo_url": "https://static.debank.com/image/bsc_token/logo_url/0x13a637026df26f846d55acc52775377717345c06/8dfc8adee7cc793678ec6d572b4d7e43.png",
        "name": "SpaceY Token",
        "optimized_symbol": "SPAY",
        "price": 1.0733528304908733,
        "protocol_id": "",
        "symbol": "SPAY",
        "time_at": 1621572439
      },
      "0xd9ec19fe88140ac0a3ab5517f8e54a2143599f80": {
        "chain": "bsc",
        "decimals": 18,
        "display_symbol": null,
        "id": "0xd9ec19fe88140ac0a3ab5517f8e54a2143599f80",
        "is_core": null,
        "is_verified": null,
        "is_wallet": false,
        "logo_url": null,
        "name": "Phenomenal Protocol PNM Token",
        "optimized_symbol": "PNM",
        "price": 0,
        "protocol_id": "",
        "symbol": "PNM",
        "time_at": 1651860868
      }
    }
   }
   const formated_data = {
 "token_dict" : Object.values(a.token_dict).map(token=> token})
}