how to convert a JSON file to a desired dataframe with Python

Question:

I have a Json file in a local folder, here is the .json file’s content:

{
  "id": "TD3$-FFA",
  "shortCode": "TD3$-FFA",
  "dataSet": {
    "id": "TD3C",
    "shortCode": "TD3C",
    "shortDescription": "Dirty Middle East Gulf to China",
    "displayGroup": "BDTI",
    "datumUnit": "Worldscale",
    "datumPrecision": 2,
    "data": [
      {
        "value": 53.59,
        "date": "2023-06-09"
      },
      {
        "value": 67.95,
        "date": "2023-06-12"
      },
      {
        "value": 73.77,
        "date": "2023-06-13"
      }
    ],
    "apiIdentifier": "RDSSYGSJBFEV9P2FLSCXGQC3510G2EGE"
  },
  "datumUnit": "$/mt",
  "datumPrecision": 3,
  "projectionStartOn": "2010-05-10T00:00:00",
  "projectionEndOn": "2023-06-19T00:00:00",
  "groupings": [
    {
      "date": "2023-06-09T00:00:00",
      "groups": [
        {
          "periodType": "m",
          "projections": [
            {
              "identifier": "TD3$BALMO",
              "period": "Jun 23",
              "value": 14.483,
              "validFrom": "2023-06-01",
              "validTo": "2023-06-30",
              "nextRolloverDate": "2023-06-30",
              "archiveDate": "2023-06-09"
            },
            {
              "identifier": "TD3$CURMON",
              "period": "Jun 23",
              "value": 13.542,
              "validFrom": "2023-06-01",
              "validTo": "2023-06-30",
              "nextRolloverDate": "2023-06-30",
              "archiveDate": "2023-06-09"
            },
            {
              "identifier": "TD3$+1_M",
              "period": "Jul 23",
              "value": 12.729,
              "validFrom": "2023-07-01",
              "validTo": "2023-07-31",
              "nextRolloverDate": "2023-06-30",
              "archiveDate": "2023-06-09"
            },
            {
              "identifier": "TD3$+2_M",
              "period": "Aug 23",
              "value": 11.058,
              "validFrom": "2023-08-01",
              "validTo": "2023-08-31",
              "nextRolloverDate": "2023-06-30",
              "archiveDate": "2023-06-09"
            },
            {
              "identifier": "TD3$+3_M",
              "period": "Sep 23",
              "value": 11.361,
              "validFrom": "2023-09-01",
              "validTo": "2023-09-29",
              "nextRolloverDate": "2023-06-30",
              "archiveDate": "2023-06-09"
            },
            {
              "identifier": "TD3$+4_M",
              "period": "Oct 23",
              "value": 12.308,
              "validFrom": "2023-10-01",
              "validTo": "2023-10-31",
              "nextRolloverDate": "2023-06-30",
              "archiveDate": "2023-06-09"
            },
            {
              "identifier": "TD3$+5_M",
              "period": "Nov 23",
              "value": 13.168,
              "validFrom": "2023-11-01",
              "validTo": "2023-11-30",
              "nextRolloverDate": "2023-06-30",
              "archiveDate": "2023-06-09"
            }
          ]
        },
        {
          "periodType": "q",
          "projections": [
            {
              "identifier": "TD3$CURQ",
              "period": "Q2 23",
              "value": 13.805,
              "validFrom": "2023-04-01",
              "validTo": "2023-06-30",
              "nextRolloverDate": "2023-06-30",
              "archiveDate": "2023-06-09"
            },
            {
              "identifier": "TD3$+1Q",
              "period": "Q3 23",
              "value": 11.716,
              "validFrom": "2023-07-01",
              "validTo": "2023-09-29",
              "nextRolloverDate": "2023-06-30",
              "archiveDate": "2023-06-09"
            },
            {
              "identifier": "TD3$+2Q",
              "period": "Q4 23",
              "value": 14.151,
              "validFrom": "2023-10-01",
              "validTo": "2023-12-22",
              "nextRolloverDate": "2023-06-30",
              "archiveDate": "2023-06-09"
            },
            {
              "identifier": "TD3$+3Q",
              "period": "Q1 24",
              "value": 12.984,
              "validFrom": "2024-01-01",
              "validTo": "2024-03-29",
              "nextRolloverDate": "2023-06-30",
              "archiveDate": "2023-06-09"
            },
            {
              "identifier": "TD3$+4Q",
              "period": "Q2 24",
              "value": 11.41,
              "validFrom": "2024-04-01",
              "validTo": "2024-06-28",
              "nextRolloverDate": "2023-06-30",
              "archiveDate": "2023-06-09"
            },
            {
              "identifier": "TD3$+5Q",
              "period": "Q3 24",
              "value": 11.117,
              "validFrom": "2024-07-01",
              "validTo": "2024-09-30",
              "nextRolloverDate": "2023-06-30",
              "archiveDate": "2023-06-09"
            }
          ]
        },
        {
          "periodType": "y",
          "projections": [
            {
              "identifier": "TD3$+1CAL",
              "period": "Cal 24",
              "value": 12.522,
              "validFrom": "2024-01-01",
              "validTo": "2024-12-24",
              "nextRolloverDate": "2023-12-22",
              "archiveDate": "2023-06-09"
            },
            {
              "identifier": "TD3$+2CAL",
              "period": "Cal 25",
              "value": 11.974,
              "validFrom": "2025-01-01",
              "validTo": "2025-12-24",
              "nextRolloverDate": "2023-12-22",
              "archiveDate": "2023-06-09"
            },
            {
              "identifier": "TD3$+3CAL",
              "period": "Cal 26",
              "value": 11.63,
              "validFrom": "2026-01-01",
              "validTo": "2026-12-24",
              "nextRolloverDate": "2023-12-22",
              "archiveDate": "2023-06-09"
            },
            {
              "identifier": "TD3$+4CAL",
              "period": "Cal 27",
              "value": 11.554,
              "validFrom": "2027-01-01",
              "validTo": "2027-12-24",
              "nextRolloverDate": "2023-12-22",
              "archiveDate": "2023-06-09"
            }
          ]
        }
      ]
    },
    {
      "date": "2023-06-12T00:00:00",
      "groups": [
        {
          "periodType": "m",
          "projections": [
            {
              "identifier": "TD3$BALMO",
              "period": "Jun 23",
              "value": 16.409,
              "validFrom": "2023-06-01",
              "validTo": "2023-06-30",
              "nextRolloverDate": "2023-06-30",
              "archiveDate": "2023-06-12"
            },
            {
              "identifier": "TD3$CURMON",
              "period": "Jun 23",
              "value": 14.864,
              "validFrom": "2023-06-01",
              "validTo": "2023-06-30",
              "nextRolloverDate": "2023-06-30",
              "archiveDate": "2023-06-12"
            },
            {
              "identifier": "TD3$+1_M",
              "period": "Jul 23",
              "value": 14.259,
              "validFrom": "2023-07-01",
              "validTo": "2023-07-31",
              "nextRolloverDate": "2023-06-30",
              "archiveDate": "2023-06-12"
            },
            {
              "identifier": "TD3$+2_M",
              "period": "Aug 23",
              "value": 12.182,
              "validFrom": "2023-08-01",
              "validTo": "2023-08-31",
              "nextRolloverDate": "2023-06-30",
              "archiveDate": "2023-06-12"
            },
            {
              "identifier": "TD3$+3_M",
              "period": "Sep 23",
              "value": 12.378,
              "validFrom": "2023-09-01",
              "validTo": "2023-09-29",
              "nextRolloverDate": "2023-06-30",
              "archiveDate": "2023-06-12"
            },
            {
              "identifier": "TD3$+4_M",
              "period": "Oct 23",
              "value": 13.092,
              "validFrom": "2023-10-01",
              "validTo": "2023-10-31",
              "nextRolloverDate": "2023-06-30",
              "archiveDate": "2023-06-12"
            },
            {
              "identifier": "TD3$+5_M",
              "period": "Nov 23",
              "value": 14.027,
              "validFrom": "2023-11-01",
              "validTo": "2023-11-30",
              "nextRolloverDate": "2023-06-30",
              "archiveDate": "2023-06-12"
            }
          ]
        },
        {
          "periodType": "q",
          "projections": [
            {
              "identifier": "TD3$CURQ",
              "period": "Q2 23",
              "value": 14.246,
              "validFrom": "2023-04-01",
              "validTo": "2023-06-30",
              "nextRolloverDate": "2023-06-30",
              "archiveDate": "2023-06-12"
            },
            {
              "identifier": "TD3$+1Q",
              "period": "Q3 23",
              "value": 12.94,
              "validFrom": "2023-07-01",
              "validTo": "2023-09-29",
              "nextRolloverDate": "2023-06-30",
              "archiveDate": "2023-06-12"
            },
            {
              "identifier": "TD3$+2Q",
              "period": "Q4 23",
              "value": 14.677,
              "validFrom": "2023-10-01",
              "validTo": "2023-12-22",
              "nextRolloverDate": "2023-06-30",
              "archiveDate": "2023-06-12"
            },
            {
              "identifier": "TD3$+3Q",
              "period": "Q1 24",
              "value": 13.124,
              "validFrom": "2024-01-01",
              "validTo": "2024-03-29",
              "nextRolloverDate": "2023-06-30",
              "archiveDate": "2023-06-12"
            },
            {
              "identifier": "TD3$+4Q",
              "period": "Q2 24",
              "value": 11.6,
              "validFrom": "2024-04-01",
              "validTo": "2024-06-28",
              "nextRolloverDate": "2023-06-30",
              "archiveDate": "2023-06-12"
            },
            {
              "identifier": "TD3$+5Q",
              "period": "Q3 24",
              "value": 11.286,
              "validFrom": "2024-07-01",
              "validTo": "2024-09-30",
              "nextRolloverDate": "2023-06-30",
              "archiveDate": "2023-06-12"
            }
          ]
        },
        {
          "periodType": "y",
          "projections": [
            {
              "identifier": "TD3$+1CAL",
              "period": "Cal 24",
              "value": 12.688,
              "validFrom": "2024-01-01",
              "validTo": "2024-12-24",
              "nextRolloverDate": "2023-12-22",
              "archiveDate": "2023-06-12"
            },
            {
              "identifier": "TD3$+2CAL",
              "period": "Cal 25",
              "value": 12.103,
              "validFrom": "2025-01-01",
              "validTo": "2025-12-24",
              "nextRolloverDate": "2023-12-22",
              "archiveDate": "2023-06-12"
            },
            {
              "identifier": "TD3$+3CAL",
              "period": "Cal 26",
              "value": 11.723,
              "validFrom": "2026-01-01",
              "validTo": "2026-12-24",
              "nextRolloverDate": "2023-12-22",
              "archiveDate": "2023-06-12"
            },
            {
              "identifier": "TD3$+4CAL",
              "period": "Cal 27",
              "value": 11.661,
              "validFrom": "2027-01-01",
              "validTo": "2027-12-24",
              "nextRolloverDate": "2023-12-22",
              "archiveDate": "2023-06-12"
            }
          ]
        }
      ]
    },
    {
      "date": "2023-06-13T00:00:00",
      "groups": [
        {
          "periodType": "m",
          "projections": [
            {
              "identifier": "TD3$BALMO",
              "period": "Jun 23",
              "value": 18.077,
              "validFrom": "2023-06-01",
              "validTo": "2023-06-30",
              "nextRolloverDate": "2023-06-30",
              "archiveDate": "2023-06-13"
            },
            {
              "identifier": "TD3$CURMON",
              "period": "Jun 23",
              "value": 15.922,
              "validFrom": "2023-06-01",
              "validTo": "2023-06-30",
              "nextRolloverDate": "2023-06-30",
              "archiveDate": "2023-06-13"
            },
            {
              "identifier": "TD3$+1_M",
              "period": "Jul 23",
              "value": 14.388,
              "validFrom": "2023-07-01",
              "validTo": "2023-07-31",
              "nextRolloverDate": "2023-06-30",
              "archiveDate": "2023-06-13"
            },
            {
              "identifier": "TD3$+2_M",
              "period": "Aug 23",
              "value": 12.258,
              "validFrom": "2023-08-01",
              "validTo": "2023-08-31",
              "nextRolloverDate": "2023-06-30",
              "archiveDate": "2023-06-13"
            },
            {
              "identifier": "TD3$+3_M",
              "period": "Sep 23",
              "value": 12.478,
              "validFrom": "2023-09-01",
              "validTo": "2023-09-29",
              "nextRolloverDate": "2023-06-30",
              "archiveDate": "2023-06-13"
            },
            {
              "identifier": "TD3$+4_M",
              "period": "Oct 23",
              "value": 13.327,
              "validFrom": "2023-10-01",
              "validTo": "2023-10-31",
              "nextRolloverDate": "2023-06-30",
              "archiveDate": "2023-06-13"
            },
            {
              "identifier": "TD3$+5_M",
              "period": "Nov 23",
              "value": 14.12,
              "validFrom": "2023-11-01",
              "validTo": "2023-11-30",
              "nextRolloverDate": "2023-06-30",
              "archiveDate": "2023-06-13"
            }
          ]
        },
        {
          "periodType": "q",
          "projections": [
            {
              "identifier": "TD3$CURQ",
              "period": "Q2 23",
              "value": 14.599,
              "validFrom": "2023-04-01",
              "validTo": "2023-06-30",
              "nextRolloverDate": "2023-06-30",
              "archiveDate": "2023-06-13"
            },
            {
              "identifier": "TD3$+1Q",
              "period": "Q3 23",
              "value": 13.042,
              "validFrom": "2023-07-01",
              "validTo": "2023-09-29",
              "nextRolloverDate": "2023-06-30",
              "archiveDate": "2023-06-13"
            },
            {
              "identifier": "TD3$+2Q",
              "period": "Q4 23",
              "value": 14.567,
              "validFrom": "2023-10-01",
              "validTo": "2023-12-22",
              "nextRolloverDate": "2023-06-30",
              "archiveDate": "2023-06-13"
            },
            {
              "identifier": "TD3$+3Q",
              "period": "Q1 24",
              "value": 13.159,
              "validFrom": "2024-01-01",
              "validTo": "2024-03-29",
              "nextRolloverDate": "2023-06-30",
              "archiveDate": "2023-06-13"
            },
            {
              "identifier": "TD3$+4Q",
              "period": "Q2 24",
              "value": 11.624,
              "validFrom": "2024-04-01",
              "validTo": "2024-06-28",
              "nextRolloverDate": "2023-06-30",
              "archiveDate": "2023-06-13"
            },
            {
              "identifier": "TD3$+5Q",
              "period": "Q3 24",
              "value": 11.276,
              "validFrom": "2024-07-01",
              "validTo": "2024-09-30",
              "nextRolloverDate": "2023-06-30",
              "archiveDate": "2023-06-13"
            }
          ]
        },
        {
          "periodType": "y",
          "projections": [
            {
              "identifier": "TD3$+1CAL",
              "period": "Cal 24",
              "value": 12.7,
              "validFrom": "2024-01-01",
              "validTo": "2024-12-24",
              "nextRolloverDate": "2023-12-22",
              "archiveDate": "2023-06-13"
            },
            {
              "identifier": "TD3$+2CAL",
              "period": "Cal 25",
              "value": 12.1,
              "validFrom": "2025-01-01",
              "validTo": "2025-12-24",
              "nextRolloverDate": "2023-12-22",
              "archiveDate": "2023-06-13"
            },
            {
              "identifier": "TD3$+3CAL",
              "period": "Cal 26",
              "value": 11.734,
              "validFrom": "2026-01-01",
              "validTo": "2026-12-24",
              "nextRolloverDate": "2023-12-22",
              "archiveDate": "2023-06-13"
            },
            {
              "identifier": "TD3$+4CAL",
              "period": "Cal 27",
              "value": 11.675,
              "validFrom": "2027-01-01",
              "validTo": "2027-12-24",
              "nextRolloverDate": "2023-12-22",
              "archiveDate": "2023-06-13"
            }
          ]
        }
      ]
    }
  ],
  "apiIdentifier": "RPSVJJTJBXBCAF2FAG2PQAVYN4UGQ9LN"
}

What is the easiest way to convert to below dataframe? Thanks
periodType column has either m or q or y as value which means month, quarter and year

date    periodType  identifier  period  value   validFrom   validTo archiveDate
2023-06-09T00:00:00 m   TD3$BALMO   Jun 23  14.483  2023-06-01  2023-06-30  2023-06-09
2023-06-09T00:00:00 m   TD3$CURMON  Jun 23  13.542  2023-06-01  2023-06-30  2023-06-09
2023-06-09T00:00:00 m   TD3$+1_M    Jul 23  12.729  2023-07-01  2023-07-31  2023-06-09
2023-06-09T00:00:00 m   TD3$+2_M    Aug 23  11.058  2023-08-01  2023-08-31  2023-06-09
2023-06-09T00:00:00 m   TD3$+3_M    Sep 23  11.361  2023-09-01  2023-09-29  2023-06-09
2023-06-09T00:00:00 m   TD3$+4_M    Oct 23  12.308  2023-10-01  2023-10-31  2023-06-09
2023-06-09T00:00:00 m   TD3$+5_M    Nov 23  13.168  2023-11-01  2023-11-30  2023-06-09
2023-06-09T00:00:00 q   TD3$CURQ    Q2 23   13.805  2023-04-01  2023-06-30  2023-06-09
2023-06-09T00:00:00 q   TD3$+1Q Q3 23   11.716  2023-07-01  2023-09-29  2023-06-09
2023-06-09T00:00:00 q   TD3$+2Q Q4 23   14.151  2023-10-01  2023-12-22  2023-06-09
2023-06-09T00:00:00 q   TD3$+3Q Q1 24   12.984  2024-01-01  2024-03-29  2023-06-09
2023-06-09T00:00:00 q   TD3$+4Q Q2 24   11.41   2024-04-01  2024-06-28  2023-06-09
2023-06-09T00:00:00 q   TD3$+5Q Q3 24   11.117  2024-07-01  2024-09-30  2023-06-09
2023-06-09T00:00:00 y   TD3$+1CAL   Cal 24  12.522  2024-01-01  2024-12-24  2023-06-09
2023-06-09T00:00:00 y   TD3$+2CAL   Cal 25  11.974  2025-01-01  2025-12-24  2023-06-09
2023-06-09T00:00:00 y   TD3$+3CAL   Cal 26  11.63   2026-01-01  2026-12-24  2023-06-09
2023-06-09T00:00:00 y   TD3$+4CAL   Cal 27  11.554  2027-01-01  2027-12-24  2023-06-09
2023-06-12T00:00:00 m   TD3$BALMO   Jun 23  16.409  2023-06-01  2023-06-30  2023-06-12
2023-06-12T00:00:00 m   TD3$CURMON  Jun 23  14.864  2023-06-01  2023-06-30  2023-06-12
2023-06-12T00:00:00 m   TD3$+1_M    Jul 23  14.259  2023-07-01  2023-07-31  2023-06-12
2023-06-12T00:00:00 m   TD3$+2_M    Aug 23  12.182  2023-08-01  2023-08-31  2023-06-12
2023-06-12T00:00:00 m   TD3$+3_M    Sep 23  12.378  2023-09-01  2023-09-29  2023-06-12
2023-06-12T00:00:00 m   TD3$+4_M    Oct 23  13.092  2023-10-01  2023-10-31  2023-06-12
2023-06-12T00:00:00 m   TD3$+5_M    Nov 23  14.027  2023-11-01  2023-11-30  2023-06-12
2023-06-12T00:00:00 q   TD3$CURQ    Q2 23   14.246  2023-04-01  2023-06-30  2023-06-12
2023-06-12T00:00:00 q   TD3$+1Q Q3 23   12.94   2023-07-01  2023-09-29  2023-06-12
2023-06-12T00:00:00 q   TD3$+2Q Q4 23   14.677  2023-10-01  2023-12-22  2023-06-12
2023-06-12T00:00:00 q   TD3$+3Q Q1 24   13.124  2024-01-01  2024-03-29  2023-06-12
2023-06-12T00:00:00 q   TD3$+4Q Q2 24   11.6    2024-04-01  2024-06-28  2023-06-12
2023-06-12T00:00:00 q   TD3$+5Q Q3 24   11.286  2024-07-01  2024-09-30  2023-06-12
2023-06-12T00:00:00 y   TD3$+1CAL   Cal 24  12.688  2024-01-01  2024-12-24  2023-06-12
2023-06-12T00:00:00 y   TD3$+2CAL   Cal 25  12.103  2025-01-01  2025-12-24  2023-06-12
2023-06-12T00:00:00 y   TD3$+3CAL   Cal 26  11.723  2026-01-01  2026-12-24  2023-06-12
2023-06-12T00:00:00 y   TD3$+4CAL   Cal 27  11.661  2027-01-01  2027-12-24  2023-06-12

Thanks so much!
I am trying to be concise but stackoverflow says "It looks like your post is mostly code; please add some more details." so please ignore the below text

Asked By: neutralname

||

Answers:

Use json_normalize:

import json

with open('file.json') as f:    
    j = json.load(f)  

df = pd.json_normalize(j['groupings'],['groups','projections'],
                        [['groups','periodType'], 'date']).head()
print (df)
   identifier  period   value   validFrom     validTo nextRolloverDate  
0   TD3$BALMO  Jun 23  14.483  2023-06-01  2023-06-30       2023-06-30   
1  TD3$CURMON  Jun 23  13.542  2023-06-01  2023-06-30       2023-06-30   
2    TD3$+1_M  Jul 23  12.729  2023-07-01  2023-07-31       2023-06-30   
3    TD3$+2_M  Aug 23  11.058  2023-08-01  2023-08-31       2023-06-30   
4    TD3$+3_M  Sep 23  11.361  2023-09-01  2023-09-29       2023-06-30   

  archiveDate groups.periodType                 date  
0  2023-06-09                 m  2023-06-09T00:00:00  
1  2023-06-09                 m  2023-06-09T00:00:00  
2  2023-06-09                 m  2023-06-09T00:00:00  
3  2023-06-09                 m  2023-06-09T00:00:00  
4  2023-06-09                 m  2023-06-09T00:00:00  
Answered By: jezrael
Categories: questions Tags: , ,
Answers are sorted by their score. The answer accepted by the question owner as the best is marked with
at the top-right corner.