我们正在开发一个集成工具,它在 JSON 下生成,它创建一个对象数组而不是对象,我们的最终应用程序不支持这种数组结构,我们无法在集成工具中更改结构,但是我们可以添加可以执行此操作的javascript。我添加了当前和预期的 JSON 有效负载。 dataReq 段内的括号需要提前删除谢谢!
当前的 Json:
{
"abc": [
{
"abcId": "1",
"dataReq": [
{
"url": "/api.css.com",
"body": {
"desc": "Sprint",
"na": "Customer Data",
"tzone": "America/Los_Angeles"
},
"method": "PATCH",
"refData": "OP"
},
[
{
"url": "/api.css.com/v1",
"body": {
"day": "Monday",
"end": "18:00:00.000Z",
"start": "08:00:00.000Z",
"hours": "08",
"Type": "Normal"
},
"method": "PATCH",
"refData": "timeslotN"
},
{
"url": "/api.css.com/v2",
"body": {
"DayOfWeek": "Tuesday",
"EndTime": "18:00:00.000Z",
"StartTime": "08:00:00.000Z",
"hours": "09",
"Type": "Normal"
},
"method": "PATCH",
"refData": "timeslotN"
}
],
{
"url": "/api.css.com/v3",
"body": {
"Name": "Spirit2",
"Type": "murchast",
"Parent": {
"accID": "2"
},
"street": "CR Steet",
"city": "NYK",
"state": null,
"postal": "9020",
"state": null,
"country": "LZ",
},
"method": "PATCH",
"refData": "Account"
},
{
"url": "/api.css.com/v4",
"body": {
"account": "12321",
"state": {
"statecode": "311"
}
},
"method": "PATCH",
"refData": "acst"
}
]
}
]
}
预期的 JSON:
{
"abc": [
{
"abcId": "1",
"dataReq": [
{
"url": "/api.css.com",
"body": {
"desc": "Sprint",
"na": "Customer Data",
"tzone": "America/Los_Angeles"
},
"method": "PATCH",
"refData": "OP"
},
{
"url": "/api.css.com/v1",
"body": {
"day": "Monday",
"end": "18:00:00.000Z",
"start": "08:00:00.000Z",
"hours": "08",
"Type": "Normal"
},
"method": "PATCH",
"refData": "timeslotN"
},
{
"url": "/api.css.com/v2",
"body": {
"DayOfWeek": "Tuesday",
"EndTime": "18:00:00.000Z",
"StartTime": "08:00:00.000Z",
"hours": "09",
"Type": "Normal"
},
"method": "PATCH",
"refData": "timeslotN"
},
{
"url": "/api.css.com/v3",
"body": {
"Name": "Spirit2",
"Type": "murchast",
"Parent": {
"accID": "2"
},
"street": "CR Steet",
"city": "NYK",
"state": null,
"postal": "9020",
"state": null,
"country": "LZ",
},
"method": "PATCH",
"refData": "Account"
},
{
"url": "/api.css.com/v4",
"body": {
"account": "12321",
"state": {
"statecode": "311"
}
},
"method": "PATCH",
"refData": "acst"
}
]
}
]
}
答案 0 :(得分:2)
Array#flatMap
。您可以简单地使用 Array#flatMap
来展平 dataReq
数组。
data.abc[0].dataReq = data.abc[0].dataReq.flatMap((d) => d);
const data={abc:[{abcId:"1",dataReq:[{url:"/api.css.com",body:{desc:"Sprint",na:"Customer Data",tzone:"America/Los_Angeles"},method:"PATCH",refData:"OP"},[{url:"/api.css.com/v1",body:{day:"Monday",end:"18:00:00.000Z",start:"08:00:00.000Z",hours:"08",Type:"Normal"},method:"PATCH",refData:"timeslotN"},{url:"/api.css.com/v2",body:{DayOfWeek:"Tuesday",EndTime:"18:00:00.000Z",StartTime:"08:00:00.000Z",hours:"09",Type:"Normal"},method:"PATCH",refData:"timeslotN"}],{url:"/api.css.com/v3",body:{Name:"Spirit2",Type:"murchast",Parent:{accID:"2"},street:"CR Steet",city:"NYK",state:null,postal:"9020",state:null,country:"LZ"},method:"PATCH",refData:"Account"},{url:"/api.css.com/v4",body:{account:"12321",state:{statecode:"311"}},method:"PATCH",refData:"acst"}]}]};
data.abc[0].dataReq = data.abc[0].dataReq.flatMap((d) => d);
console.log(JSON.stringify(data))
答案 1 :(得分:0)
这是使用 object-scan 的通用解决方案。
此解决方案会将双嵌套数组上拉一层。
// const objectScan = require('object-scan');
const data1 = { abc: [ { abcId: '1', dataReq: [ { url: '/api.css.com', body: { desc: 'Sprint', na: 'Customer Data', tzone: 'America/Los_Angeles' }, method: 'PATCH', refData: 'OP' }, [ { url: '/api.css.com/v1', body: { day: 'Monday', end: '18:00:00.000Z', start: '08:00:00.000Z', hours: '08', Type: 'Normal' }, method: 'PATCH', refData: 'timeslotN' }, { url: '/api.css.com/v2', body: { DayOfWeek: 'Tuesday', EndTime: '18:00:00.000Z', StartTime: '08:00:00.000Z', hours: '09', Type: 'Normal' }, method: 'PATCH', refData: 'timeslotN' } ], { url: '/api.css.com/v3', body: { Name: 'Spirit2', Type: 'murchast', Parent: { accID: '2' }, street: 'CR Steet', city: 'NYK', state: null, postal: '9020', state: null, country: 'LZ' }, method: 'PATCH', refData: 'Account' }, { url: '/api.css.com/v4', body: { account: '12321', state: { statecode: '311' } }, method: 'PATCH', refData: 'acst' } ] } ] };
const modify = objectScan(['**.*[*][*]'], {
rtn: 'count',
filterFn: ({ parent, gparent, property, gproperty }) => {
gparent.splice(gproperty + 1, 0, parent[property]);
parent.splice(property, 1);
if (parent.length === 0) {
gparent.splice(gproperty, 1);
}
}
});
console.log(modify(data1));
// => 2
console.log(data1);
// => { abc: [ { abcId: '1', dataReq: [ { url: '/api.css.com', body: { desc: 'Sprint', na: 'Customer Data', tzone: 'America/Los_Angeles' }, method: 'PATCH', refData: 'OP' }, { url: '/api.css.com/v1', body: { day: 'Monday', end: '18:00:00.000Z', start: '08:00:00.000Z', hours: '08', Type: 'Normal' }, method: 'PATCH', refData: 'timeslotN' }, { url: '/api.css.com/v2', body: { DayOfWeek: 'Tuesday', EndTime: '18:00:00.000Z', StartTime: '08:00:00.000Z', hours: '09', Type: 'Normal' }, method: 'PATCH', refData: 'timeslotN' }, { url: '/api.css.com/v3', body: { Name: 'Spirit2', Type: 'murchast', Parent: { accID: '2' }, street: 'CR Steet', city: 'NYK', state: null, postal: '9020', country: 'LZ' }, method: 'PATCH', refData: 'Account' }, { url: '/api.css.com/v4', body: { account: '12321', state: { statecode: '311' } }, method: 'PATCH', refData: 'acst' } ] } ] }
.as-console-wrapper {max-height: 100% !important; top: 0}
<script src="https://bundle.run/object-scan@15.0.0"></script>
免责声明:我是object-scan
的作者这是一个例子,可以更清楚地说明正在发生的事情
// const objectScan = require('object-scan');
const data2 = { a: { b: [[1, [2, 3]], { c: 4 }] }, d: [{ e: 5 }, 6, [7, 8]] };
const modify = objectScan(['**.*[*][*]'], {
rtn: 'count',
filterFn: ({ parent, gparent, property, gproperty }) => {
gparent.splice(gproperty + 1, 0, parent[property]);
parent.splice(property, 1);
if (parent.length === 0) {
gparent.splice(gproperty, 1);
}
}
});
console.log(modify(data2));
// => 4
console.log(data2);
// => { a: { b: [ 1, [ 2, 3 ], { c: 4 } ] }, d: [ { e: 5 }, 6, 7, 8 ] }
.as-console-wrapper {max-height: 100% !important; top: 0}
<script src="https://bundle.run/object-scan@15.0.0"></script>
免责声明:我是object-scan
的作者