简体   繁体   中英

How to flatten nested Json dynamically on snowflake or javascript?

This is an example of the JSON file I'm working with, it has around 600 rows of the same nested JSON structure.

{
  "at": {
    "Availability": "Yes",
    "Message": "NV",
    "Delivery option": "fast",
  },
  "childNodeIds": [],
  "crawlMessageFlags": null,
  "pd": {
    "product_id": "product_id value",
    "product_name": "product_name value",
    "retailerName": "retailerName value",
    "stock_status": "InStock",
    "subClassName": "n/a"
  },
  "sellers": [],
  "zipDetails": {}
}

I want to generate a report that has the keys inside PD as the column names. Example

--------------------------------------------------------
    product_id  |   product_name     | retailerName
-----------------------------------------------------------
productid value1| product_name value1| retailerName value1
productid value2| product_name value2| retailerName value2
productid value3| product_name value3| retailerName value3
productid value4| product_name value4| retailerName value4

I can generate this table with hardcoded values but I want to do it dynamically as we have several different use cases.

I have tried several solutions from the web but none solves this without hardcoding.

Any solutions?

Here's one approach that might work for you. Depending on the structure of the resulting variable (output) you might want to refactor accordingly.

 const list = [ { "at": { "Availability": "Yes", "Message": "NV", "Delivery option": "fast", }, "childNodeIds": [], "crawlMessageFlags": null, "pd": { "product_id": "product_id value1", "product_name": "product_name value1", "retailerName": "retailerName value1", "stock_status": "InStock 1", "subClassName": "n/a" }, "sellers": [], "zipDetails": {} }, { "at": { "Availability": "Yes", "Message": "NV", "Delivery option": "fast", }, "childNodeIds": [], "crawlMessageFlags": null, "pd": { "product_id": "product_id value2", "product_name": "product_name value2", "retailerName": "retailerName value2", "stock_status": "InStock 2", "subClassName": "n/a" }, "sellers": [], "zipDetails": {} } ] const output = list.reduce((acc,{ pd })=>{ acc.push([ pd.product_id, pd.product_name, pd.retailerName ]) return acc; }, [["product_id", "product_name", "retailerName"]]); console.log( output );

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM