通过正则表达式从 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})
}
下午好,需要从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})
}