如何调整JSON.stringify输出结构,生成含characters字段的JSON字符串?
问题描述
现有如下JSON字符串:
[{"spawnIndex":0,"name":"name","surname":"surname","level":0,"cash":0,"bank":0,"gender":"male","fraction":"fraction","family":"family","playedTime":"0","ban":{}}]
它是通过以下JavaScript代码生成的:
let charackters = []; charackters.push({ spawnIndex: 0, name: 'name', surname: 'surname', level: 0, cash: 0, bank: 0, gender: 'male', fraction: 'fraction', family: 'family', playedTime: '0', ban: {} }); let string = JSON.stringify(charackters);
需要将该字符串调整为如下格式(这是JavaScript对象字面量,非严格JSON):
{ characters: [{ spawnIndex: 0, name: 'name', surname: 'surname', level: 0, cash: 0, bank: 0, gender: 'male', fraction: 'fraction', family: 'family', playedTime: '0', ban: {} }] }
解决方案
1. 修改原生成代码(推荐)
直接在生成阶段构建目标结构,无需事后处理字符串:
let characters = []; characters.push({ spawnIndex: 0, name: 'name', surname: 'surname', level: 0, cash: 0, bank: 0, gender: 'male', fraction: 'fraction', family: 'family', playedTime: '0', ban: {} }); // 构建包含characters字段的外层对象 const resultObject = { characters: characters }; // 自定义格式化函数,将JSON转换为目标对象字面量格式 function formatToTarget(obj) { return JSON.stringify(obj, null, 4) .replace(/"([^"]+)":/g, '$1:') // 去掉键名的双引号 .replace(/"/g, "'"); // 把字符串的双引号换成单引号 } const formattedString = formatToTarget(resultObject); console.log(formattedString);
2. 处理已有的JSON字符串
如果已经拿到初始的JSON字符串,可通过解析、重新包装、格式化三步完成转换:
// 初始JSON字符串 const originalJson = '[{"spawnIndex":0,"name":"name","surname":"surname","level":0,"cash":0,"bank":0,"gender":"male","fraction":"fraction","family":"family","playedTime":"0","ban":{}}]'; // 解析为JavaScript数组 const charactersArray = JSON.parse(originalJson); // 包装成目标结构的对象 const targetObject = { characters: charactersArray }; // 格式化并转换为目标格式 const formattedString = JSON.stringify(targetObject, null, 4) .replace(/"([^"]+)":/g, '$1:') .replace(/"/g, "'"); console.log(formattedString);
注意事项
- 目标格式不属于严格JSON:JSON规范要求键名必须用双引号,字符串也必须用双引号,而目标格式使用了无引号键名和单引号字符串,这是JavaScript对象字面量的写法。
- 正则替换仅适用于结构简单的场景,如果对象嵌套层级复杂或字符串中包含特殊字符,可能需要更严谨的处理逻辑。
内容的提问来源于stack exchange,提问作者d4ne
相关产品推荐
相关产品推荐

