【问题标题】:How to efficiently create nested json from another json object如何从另一个 json 对象有效地创建嵌套 json
【发布时间】:2020-10-31 23:59:00
【问题描述】:

我正在尝试执行一个 sql 查询,我想从结果中创建一个嵌套的 json 对象。在使用 sequelize 执行查询后,我得到了这样的 json 响应。我想从这个 json 创建一个嵌套的 json。

[
  {
    uid: 'RBZ7K2122715',
    subscriberName: 'sub1',
    productName: 'PROD1',
    actiondate: 2020-10-06T02:00:00.000Z,
    enrolStatus: 'ACTIVE',
    lastModifiedTime: 2020-10-07T19:41:54.000Z
  },
  {
    uid: 'RBZ7K2122715',
    subscriberName: 'sub1',
    productName: 'PROD2',
    actiondate: 2020-10-06T02:00:00.000Z,
    enrolStatus: 'ACTIVE',
    lastModifiedTime: 2020-10-07T19:42:44.000Z
  },
  {
    uid: 'RBZ7K2123333',
    subscriberName: 'sub2',
    productName: 'PROD2',
    actiondate: 2020-07-01T08:32:00.000Z,
    enrolStatus: 'NOT-ACTIVE',
    lastModifiedTime: 2020-10-14T13:49:37.000Z
  },
  {
    uid: 'RBZ7K2123333',
    subscriberName: 'sub2',
    productName: 'PROD1',
    actiondate: 2020-04-01T03:32:00.000Z,
    enrolStatus: 'ACTIVE',
    lastModifiedTime: 2020-10-14T13:50:08.000Z
  },
  {
    uid: 'RBZ7K2122715',
    subscriberName: 'sub2',
    productName: 'PROD2',
    actiondate: 2020-03-12T08:32:00.000Z,
    enrolStatus: 'ACTIVE',
    lastModifiedTime: 2020-10-30T12:07:55.000Z
  }
]

我想创建一个这样的嵌套 json 对象。任何人都可以在这里帮助有效地实现它吗?

[
      {
        "uid": "RBZ7K2122715",
        "enrollment-status" : [
                                    {
                                        "subscriberName" : "sub1",
                                        "productName" : "PROD2",
                                        "actionDate" :  "2020-03-12 08:32:00",
                                        "status" : "ACTIVE",
                                        "lastModifiedTime" : "2020-10-30 12:07"
                                    },
                                    {
                                        "subscriberName" : "sub2",
                                        "productName" : "PROD1",
                                        "actionDate" :  "2020-10-06 02:00:00",
                                        "status" : "ACTIVE",
                                        "lastModifiedTime" : "2020-10-14 13:49"
                                    },
                                    {
                                        "subscriberName" : "sub2",
                                        "productName" : "PROD2",
                                        "actionDate" :  "2020-10-06 02:00:00",
                                        "status" : "ACTIVE",
                                        "lastModifiedTime" : "2020-10-14 13:49"
                                    }
                               ]
      },
      {
        "uid": "RBZ7K2123333",
        "enrollment-status" : [
                                    {
                                        "subscriberName" : "sub1",
                                        "productName" : "PROD2",
                                        "actionDate" :  "2020-07-01 08:32:00",
                                        "status" : "NOT-ACTIVE",
                                        "lastModifiedTime" : "2020-10-14 13:49"
                                    },
                                    {
                                        "subscriberName" : "sub1",
                                        "productName" : "PROD1",
                                        "actionDate" :  "2020-04-01 03:32:00",
                                        "status" : "ACTIVE",
                                        "lastModifiedTime" : "2020-10-14 13:49"
                                    }
                              ]
      }
]

【问题讨论】:

  • 您能告诉我们您是如何在您的应用程序中获得 SQL 响应的吗?已经是 JSON 了吗?
  • @tmslnz 在 nodejs 中使用 sequelize.query 库

标签: javascript node.js json


【解决方案1】:

你可以试试下面的代码

queryResult.reduce((a, {
  uid, subscriberName, productName, actiondate, enrolStatus, lastModifiedTime,
}) => {
  const indexOfSameUid = a.findIndex((v) => v.uid === uid);
  const currentEnrollmentStatus = {
    subscriberName, productName, actionDate: actiondate, status: enrolStatus, lastModifiedTime,
  };
  if (indexOfSameUid === -1) {
    a.push({
      uid,
      'enrollment-status': [currentEnrollmentStatus],
    });
    return a;
  }
  a[indexOfSameUid]['enrollment-status'].push(currentEnrollmentStatus);
  return a;
}, []);

【讨论】:

    猜你喜欢
    • 2018-12-29
    • 1970-01-01
    • 2021-10-02
    • 2019-06-18
    • 1970-01-01
    • 1970-01-01
    • 2016-10-16
    • 2021-01-01
    • 2020-12-26
    相关资源
    最近更新 更多