使用Python将API返回的特殊格式数据转换为指定JSON结构
解决方案
步骤说明
- 清理输入字符串:先去除末尾多余的换行符和空格,避免分割后产生空元素。
- 分割块数据:用
{#作为分隔符,把原始字符串拆分成独立的配置块。 - 提取vwId和生成vdef数组:每个块的第一个元素就是
vwId,剩余元素按~拆分键值对,组成vdef数组。
代码实现(JavaScript)
// 原始输入字符串 const rawInput = 'tt_cls|rd~1|rk~1|kk~1{#tt2_cls|rd~1|rk~1|kk~0{#tt3_cls|rd~1|rk~1|kk~0\n\n'; // 1. 清理字符串,去除末尾换行和空格 const cleanedInput = rawInput.trim(); // 2. 分割成独立配置块,过滤空元素 const blocks = cleanedInput.split('{#').filter(block => block.length > 0); // 3. 处理每个块,生成目标结构 const finalResult = blocks.map(block => { const segments = block.split('|'); // 提取vwId(块的第一个部分) const vwId = segments[0]; // 处理剩余部分生成vdef数组 const vdef = segments.slice(1).map(item => { const [key, value] = item.split('~'); return { name: key, value: value }; // 若需直接键值对对象,可替换为:{ [key]: value } }); return { vwId, vdef }; }); // 转换为格式化的JSON输出 console.log(JSON.stringify(finalResult, null, 2));
输出结果
[ { "vwId": "tt_cls", "vdef": [ { "name": "rd", "value": "1" }, { "name": "rk", "value": "1" }, { "name": "kk", "value": "1" } ] }, { "vwId": "tt2_cls", "vdef": [ { "name": "rd", "value": "1" }, { "name": "rk", "value": "1" }, { "name": "kk", "value": "0" } ] }, { "vwId": "tt3_cls", "vdef": [ { "name": "rd", "value": "1" }, { "name": "rk", "value": "1" }, { "name": "kk", "value": "0" } ] } ]
关键注意点
- 必须过滤分割后的空元素,否则会生成无效的
vwId和空的vdef数组。 - 如果你的
vdef需要的是键值对对象而非数组,只需把map替换为reduce来生成对象即可。
内容的提问来源于stack exchange,提问作者Keshav
相关产品推荐
相关产品推荐

