【问题标题】:Format JSON with new keys from value after sort in javascript在javascript中排序后,使用来自值的新键格式化JSON
【发布时间】:2021-08-08 05:37:09
【问题描述】:

我正在尝试在 Nodejs 中重写我现有的一些 python 代码。但是,我在数据类型方面遇到了一些问题,因为我习惯于在 python 中创建字典,而这在 Nodejs 中不可用。基本上,我使用 psycopg2(从 cur.fetchall() 获取行)从我们的数据库中获取数据,它返回的结果如下。

##Column names: Snapshot_day, Bucket, Sub_Bucket, Bucket_Flag, Issue_Reason,  Reason_Description, first_violation_date, dw_create_date, dw_update_date, area,  region
rows = (("2021-04-05", "Virginia", "Vir123", "Yes", "Connection Issue", "Connection Issue", "2020-01-17", "2020-01-17", "2020-01-17", "EC", "AMER"),
         ("2020-01-05", "New York", "POR532", "No", "Server", "Failure", "2020-01-17", "2020-01-17", "2020-01-17", "EC", "AMER"),
         ("2020-01-05", "Virginia", "Vir543", "Yes", "Server", "Failure", "2020-01-17", "2020-01-17", "2020-02-17", "EC", "AMER")
        )

我在这些行(元组)中使用 for 循环和 if 条件将 Snapshot_day、bucket、sub_bucket 和 Issue 原因分配为键,最后按升序对其进行排序。

快进,我的最终输出如下所示。运行python代码here

{"2020-01-05":{"Virginia":{"Vir543":{"Yes":{"Issue_Reason":"Server","Reason_Description":"Failure","area":"WC","dw_create_date":"2020-01-17","dw_update_date":"2020-02-17","first_violation_date":"2020-01-17","region":"AMER"}}},"New York":{"POR532":{"No":{"Issue_Reason":"Server","Reason_Description":"Failure","area":"EC","dw_create_date":"2020-01-17","dw_update_date":"2020-01-17","first_violation_date":"2020-01-17","region":"AMER"}}}},"2021-04-05":{"Virginia":{"Vir123":{"Yes":{"Issue_Reason":"Connection Issue","Reason_Description":"Connection Issue","area":"EC","dw_create_date":"2020-01-17","dw_update_date":"2020-01-17","first_violation_date":"2020-01-17","region":"AMER"}}}}}

我正在尝试在 Nodejs 中获得类似的输出。我能够使用 pg 库从数据库中提取数据。我的输出如下,但我无法弄清楚如何将 JSON 输出作为我的 python 文件。

##Output from my Javascript
##Column names: Snapshot_day, Bucket, Sub_Bucket, Bucket_Flag, Issue_Reason,  Reason_Description, first_violation_date, dw_create_date, dw_update_date, area,  region
[
  [
    '2021-04-05',
    'Virginia',
    'Vir123',
    'Yes',
    'Connection Issue',
    'Connection Issue',
    '2020-01-17',
    '2020-01-17',
    '2020-01-17',
    'EC',
    'AMER'
  ],
  [
    '2020-01-05',
    'New York',
    'POR532',
    'No',
    'Server',
    'Failure',
    '2020-01-17',
    '2020-01-17',
    '2020-01-17',
    'EC',
    'AMER'
  ],
  [
    '2020-01-05',
    'Virginia',
    'Vir543',
    'Yes',
    'Server',
    'Failure',
    '2020-01-17',
    '2020-01-17',
    '2020-02-17',
    'EC',
    'AMER'
  ]
]

【问题讨论】:

    标签: javascript python node.js json object


    【解决方案1】:

    // dbOutput represents your database output
    const dbOutput = [
      [
        '2021-04-05',
        'Virginia',
        'Vir123',
        'Yes',
        'Connection Issue',
        'Connection Issue',
        '2020-01-17',
        '2020-01-17',
        '2020-01-17',
        'EC',
        'AMER'
      ],
      [
        '2020-01-05',
        'New York',
        'POR532',
        'No',
        'Server',
        'Failure',
        '2020-01-17',
        '2020-01-17',
        '2020-01-17',
        'EC',
        'AMER'
      ],
      [
        '2020-01-05',
        'Virginia',
        'Vir543',
        'Yes',
        'Server',
        'Failure',
        '2020-01-17',
        '2020-01-17',
        '2020-02-17',
        'EC',
        'AMER'
      ]
    ]
    // reduce the array into an object
    const obj = dbOutput.reduce((map,data)=>{
     const [date,province,code,flag,issueReason,reasonDescription,createDate,updateDate,violationDate,area,region] = data
    if(!map[date]){
      map[date]={}
    }
    if(!map[date][province]){
     map[date][province]={}
    }
    if(!map[date][province][code]){
    map[date][province][code]={}
    }
    if(!map[date][province][code][flag]){
    map[date][province][code][flag]={}
    }
    map[date][province][code][flag]={
    'Issue_Reason':issueReason,
    'Reason_Description':reasonDescription,
    area,
    region,
    'dc_create_date':createDate,
    'dc_update_date':updateDate,
    }
    return map
    },{})
    //get the sorted date keys of the object then reduce the sorted keys array into an the final output 
    const output = Object.keys(obj).sort((a,b)=> new Date(a) - new Date(b)).reduce((map,date) =>{
     map[date]={...obj[date]}
    return map
    },{})
    console.log(JSON.stringify(output))

    【讨论】:

      猜你喜欢
      • 2019-08-05
      • 2014-10-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-02
      • 1970-01-01
      相关资源
      最近更新 更多