如何使用JavaScript将逗号分隔Query param转换为KeyValue Pair JSON对象
实现说明
首先需要明确:你预期的多同键JSON结构不符合JavaScript对象与标准JSON规范——JS对象中同名键会被后写入的值覆盖,最终只会保留最后一个Id字段,原生JSON.stringify序列化时也会自动去重同名键,无法直接通过操作JS对象得到你写的结构。
下面给两种适配不同场景的实现:
方案1:标准兼容结构(业务场景优先选)
如果不是硬要求必须重复键,优先用数组存储多值的标准结构,所有JSON解析器、JS原生逻辑都能正常处理,不会丢值,Schema配置数组校验规则也更简单:
// 原始输入 const source = {"Id":"ZX0123455555,ZX0123455555,ZX0123455545"}; const result = { Id: source.Id.split(',') }; // 输出结构:{ Id: [ 'ZX0123455555', 'ZX0123455555', 'ZX0123455545' ] }
方案2:生成重复键的JSON文本(仅适配特殊校验要求)
如果你的校验流程强制要求传入你给出的重复键格式文本,直接手动拼接字符串即可,不要走原生对象序列化:
const source = {"Id":"ZX0123455555,ZX0123455555,ZX0123455545"}; const idList = source.Id.split(','); // 手动拼接目标格式字符串 const targetJsonText = `{ ${idList.map(idVal => `"Id": "${idVal}"`).join(',\n')} }`;
运行后targetJsonText的内容和你给出的目标结构完全一致:
{ "Id": "ZX0123455555", "Id": "ZX0123455555", "Id": "ZX0123455545" }
注意:这个输出是纯字符串,不要用
JSON.parse把它转回JS对象,否则依然会出现键覆盖、只保留最后一个Id值的问题,仅适合直接传文本给校验逻辑的场景。
内容的提问来源于stack exchange,提问作者Brylle
相关产品推荐
相关产品推荐

