如何让数组内的API响应呈现行列表格格式?
如何将数组内带格式控制符的API响应转为行列表格格式?
问题描述
API返回的原始响应是如下表格形式的文本:
AccountId Requests 1 3 2 67 3 50 10 -- 10 batches, 10 datasources
但将该响应存入数组后,变成了包含ANSI控制字符和换行符的单个字符串元素:
["\e[1mAccountId requests \n\e[m1 3 \n2 67 \n3 50 \n 9. \n-- 10 batches, 10 datasource\n"]
需要把这个数组内的字符串重新处理成清晰的行列表格形式。
解决步骤
1. 提取并清理字符串
先从数组中取出目标字符串,然后移除所有ANSI格式控制字符(比如\e[1m、\e[m这类终端高亮标记),避免干扰后续解析。
示例代码(JavaScript):
const rawStr = yourArray[0]; // 移除ANSI控制字符 const cleanedStr = rawStr.replace(/\e\[[0-9;]*m/g, '');
示例代码(Python):
import re raw_str = your_array[0] # 移除ANSI控制字符 cleaned_str = re.sub(r'\x1b\[[0-9;]*m', '', raw_str)
2. 分割行并过滤无效内容
将清理后的字符串按换行符分割成单行数组,然后过滤掉空行和末尾的统计注释行:
示例代码(JavaScript):
const lines = cleanedStr.split('\n').filter(line => line.trim() !== '' && !line.startsWith('--'));
示例代码(Python):
lines = [line.strip() for line in cleaned_str.split('\n') if line.strip() and not line.startswith('--')]
3. 解析每行数据为结构化格式
处理表头和数据行,把每行内容映射为键值对或对象,注意处理AccountId缺失的情况:
示例代码(JavaScript):
const [headerLine, ...dataLines] = lines; // 分割表头(多个空格分隔) const headers = headerLine.split(/\s+/).filter(h => h); // 解析数据行 const tableData = dataLines.map(line => { const parts = line.split(/\s+/).filter(p => p); // 处理AccountId为空的情况 const accountId = parts.length === 1 ? null : parts[0]; const requests = parts.length === 1 ? parts[0] : parts[1]; return { [headers[0]]: accountId, [headers[1]]: requests }; });
示例代码(Python):
header_line = lines[0] headers = [h for h in header_line.split() if h] table_data = [] for line in lines[1:]: parts = [p for p in line.split() if p] # 处理AccountId为空的情况 account_id = parts[0] if len(parts) == 2 else None requests = parts[1] if len(parts) == 2 else parts[0] table_data.append({ headers[0]: account_id, headers[1]: requests })
4. 生成行列表格输出
如果需要输出可视化的表格文本,可以遍历结构化数据重新拼接:
示例代码(JavaScript):
// 先打印表头 console.log(headers.join('\t')); // 打印数据行 tableData.forEach(row => { console.log(`${row.AccountId || ''}\t${row.Requests}`); });
示例代码(Python):
# 打印表头 print('\t'.join(headers)) # 打印数据行 for row in table_data: print(f"{row['AccountId'] or ''}\t{row['requests']}")
最终输出的行列表格会和原始API响应格式一致,或者更规整的制表符分隔形式。
内容的提问来源于stack exchange,提问作者Ckate
相关产品推荐
相关产品推荐

