使用Map处理JSON数据后,如何添加Catalogues标签生成目标格式?
问题描述
现有如下JSON数据:
{ "siteCode": "S01", "modelCode": "M001", "modelDesc": "Desc01", "price": 100, "status": "A", "startDate": "May 6 2023 4:13PM", "endDate": "May 6 2023 4:13PM" }, { "siteCode": "S01", "modelCode": "M001", "modelDesc": "Desc01", "price": 50, "status": "A", "startDate": "May 10 2023 4:13PM", "endDate": "May 10 2023 4:13PM" }
需要转换为包含Catalogues数组的目标格式:
{ "Catalogues": [ { "siteCode": "S01", "modelCode": "M001", "modelDesc": "Desc01", "datelist": [ { "price": 100, "status": "A", "startDate": "May 6 2023 4:13PM", "endDate": "May 6 2023 4:13PM" }, { "price": 50, "status": "A", "startDate": "May 10 2023 4:13PM", "endDate": "May 10 2023 4:13PM" } ] } ] }
当前使用以下代码处理,但返回结果缺少外层的Catalogues标签:
const data = result.recordset const map = new Map(data.map(({ siteCode, modelCode, modelDesc }) => [modelCode, { siteCode, modelCode, modelDesc, datelist: [], }] )); for (const { siteCode, modelCode, modelDesc, ...rest } of data) { map.get(modelCode).datelist.push(rest) }; const resultMap = [...map.values()]; return res.json(resultMap)
解决方案
只需要将最终的resultMap包裹在一个对象中,以Catalogues作为键即可,修改后的代码如下:
const data = result.recordset const map = new Map(data.map(({ siteCode, modelCode, modelDesc }) => [modelCode, { siteCode, modelCode, modelDesc, datelist: [], }] )); for (const { siteCode, modelCode, modelDesc, ...rest } of data) { map.get(modelCode).datelist.push(rest) }; const resultMap = [...map.values()]; // 关键修改:将结果包装成包含Catalogues键的对象 return res.json({ Catalogues: resultMap })
原理说明:
- 原代码直接返回了合并后的数组
resultMap,而目标格式要求外层是一个包含Catalogues属性的对象,属性值为该数组。 - 通过
{ Catalogues: resultMap }创建符合要求的结构,再传入res.json()即可生成正确的目标格式。
内容的提问来源于stack exchange,提问作者615
相关产品推荐
相关产品推荐

