如何自定义/修改对象查询结果的JSON Response ?



项目使用:nodejs, expressjs和数据库MSSQL 2000 with node-mssql

我有一个从查询表中得到的对象示例如下。对象的长度将根据不同的"模型代码"而变化


[
{
poNumber: '002',
modelCode: 'SM-A536EZWHXID',
orderQuantity: '1',
invoiceQuantity: null,
price: '1000',
totalPrice: '1000',
receivedDate: 'Mar 26 2023  3:26AM',
status: null,
remarks: null
},
{
poNumber: '002',
modelCode: 'SM-A536EZWHXID',
orderQuantity: '1',
invoiceQuantity: null,
price: '1000',
totalPrice: '1000',
receivedDate: 'Mar 26 2023  3:26AM',
status: null,
remarks: null
},
{
poNumber: '002',
modelCode: 'SM-A536EZOGXID',
orderQuantity: '1',
invoiceQuantity: null,
price: '1000',
totalPrice: '1000',
receivedDate: 'Mar 26 2023  3:26AM',
status: null,
remarks: null
}
]

与相应的Json

[
{
"poNumber": "002",
"modelCode": "SM-A536EZWHXID",
"orderQuantity": "1",
"invoiceQuantity": null,
"price": "1000",
"totalPrice": "1000",
"receivedDate": "Mar 26 2023  3:26AM",
"status": null,
"remarks": null
},
{
"poNumber": "002",
"modelCode": "SM-A536EZWHXID",
"orderQuantity": "1",
"invoiceQuantity": null,
"price": "1000",
"totalPrice": "1000",
"receivedDate": "Mar 26 2023  3:26AM",
"status": null,
"remarks": null
},
{
"poNumber": "002",
"modelCode": "SM-A536EZOGXID",
"orderQuantity": "1",
"invoiceQuantity": null,
"price": "1000",
"totalPrice": "1000",
"receivedDate": "Mar 26 2023  3:26AM",
"status": null,
"remarks": null
}
]

但是客户端需要这种格式的Json

{
"poNumber": "002",
"items : [
{
"modelCode": "SM-A536EZWHXID",
"orderQuantity": "1",
"invoiceQuantity": null,
"price": "1000",
"totalPrice": "1000",
"receivedDate": "Mar 26 2023  3:26AM",
},
{
"modelCode": "SM-A536EZWHXID",
"orderQuantity": "1",
"invoiceQuantity": null,
"price": "1000",
"totalPrice": "1000",
"receivedDate": "Mar 26 2023  3:26AM",
},
{
"modelCode": "SM-A536EZOGXID",
"orderQuantity": "1",
"invoiceQuantity": null,
"price": "1000",
"totalPrice": "1000",
"receivedDate": "Mar 26 2023  3:26AM",
}
],
"status": null,
"remarks": null
}

它看起来很像分组到:

标题部分:"身体部分:带有标签"物品";及其商品的"modelcode"、"orderquantity"、"invoicquantity"、"price"、"totalprice"、"receiveddate";页脚部分:"status"one_answers"remarks">

我如何从表中生成对象或修改json以获得json结构如需要那样?

修改json和操作查询结果,但不工作

这是一个分组的方法:

  • 创建一个Map,以poNumber为键,items为空数组,statusremarks为属性,对应的值为目标对象结构。
  • 迭代数据以填充poNumber
  • 从该地图检索到的条目的items数组
  • 从地图中提取值

const data =  [{"poNumber": "002","modelCode": "SM-A536EZWHXID","orderQuantity": "1","invoiceQuantity": null,"price": "1000","totalPrice": "1000","receivedDate": "Mar 26 2023  3:26AM","status": null,"remarks": null},{"poNumber": "002","modelCode": "SM-A536EZWHXID","orderQuantity": "1","invoiceQuantity": null,"price": "1000","totalPrice": "1000","receivedDate": "Mar 26 2023  3:26AM","status": null,"remarks": null},{"poNumber": "002","modelCode": "SM-A536EZOGXID","orderQuantity": "1","invoiceQuantity": null,"price": "1000","totalPrice": "1000","receivedDate": "Mar 26 2023  3:26AM","status": null,"remarks": null}];
const map = new Map(data.map(({poNumber, status, remarks}) => 
[poNumber, {poNumber, items: [], status, remarks}]
));
for (const {poNumber, status, remarks, ...rest} of data) {
map.get(poNumber).items.push(rest);
}
const result = [...map.values()];
console.log(result);

@vimmuth,感谢您的回复

这是我的vscode

结果
{
"002": {
"poNumber": "002",
"items": [
{
"modelCode": "SM-A536EZWHXID",
"orderQuantity": "1",
"invoiceQuantity": null,
"price": "1000",
"totalPrice": "1000",
"receivedDate": "Mar 26 2023  3:26AM"
},
{
"modelCode": "SM-A536EZWHXID",
"orderQuantity": "1",
"invoiceQuantity": null,
"price": "1000",
"totalPrice": "1000",
"receivedDate": "Mar 26 2023  3:26AM"
{
"modelCode": "SM-A536EZOGXID",
"orderQuantity": "1",
"invoiceQuantity": null,
"price": "1000",
"totalPrice": "1000",
"receivedDate": "Mar 26 2023  3:26AM"
}
],
"status": null,
"remarks": null
}
}

如何删除多余的行号#2?

"002":{

谢谢

const data =  [{"poNumber": "002","modelCode": "SM-A536EZWHXID","orderQuantity": "1","invoiceQuantity": null,"price": "1000","totalPrice": "1000","receivedDate": "Mar 26 2023  3:26AM","status": null,"remarks": null},{"poNumber": "002","modelCode": "SM-A536EZWHXID","orderQuantity": "1","invoiceQuantity": null,"price": "1000","totalPrice": "1000","receivedDate": "Mar 26 2023  3:26AM","status": null,"remarks": null},{"poNumber": "002","modelCode": "SM-A536EZOGXID","orderQuantity": "1","invoiceQuantity": null,"price": "1000","totalPrice": "1000","receivedDate": "Mar 26 2023  3:26AM","status": null,"remarks": null}];
const map = new Map(data.map(({poNumber, status, remarks}) => 
[poNumber, {poNumber, items: [], status, remarks}]
));
for (const {poNumber, status, remarks, ...rest} of data) {
map.get(poNumber).items.push(rest);
}
const result = [...map.values()];
console.log(result);

@trincot感谢您的回复

我尝试在我的vscode,但为什么结果是这样的?

[
{
poNumber: '002',
items: [ [Object], [Object], [Object] ],
status: null,
remarks: null
}
]

* * * *编辑/更新以上结果来自独立执行

但是当我集成到我的代码时,结果就像期望的那样完美

案例解析

最新更新