如何将嵌套JSON转换为CSV文件

mxg2im7a  于 2023-09-27  发布在  其他
关注(0)|答案(1)|浏览(85)

我试图将JSON文件写入CSV,但遇到了麻烦,因为它被分成了一个层次结构。
下面是其中一个分支的示例,然后它按商店重复以构建示出每个商店的客流量的表。
最好使用python将其拆分为CSV?flatten函数没有返回正确的结构,虽然我可能做错了,我不确定,任何帮助都将不胜感激!
谢谢你,
Json代码示例

{
  "sites": [
    {
      "storeID": "Store 1",
      "siteTraffic": [
        {
          "traffic": [
            {
              "startTime": "000000",
              "enters": "1",
              "exits": "6",
              "code": "02"
            },
            {
              "startTime": "010000",
              "enters": "4",
              "exits": "2",
              "code": "02"
            },
            {
              "startTime": "020000",
              "enters": "1",
              "exits": "1",
              "code": "02"
            },
            {
              "startTime": "030000",
              "enters": "1",
              "exits": "0",
              "code": "02"
            },
            {
              "startTime": "040000",
              "enters": "11",
              "exits": "4",
              "code": "02"
            },
            {
              "startTime": "050000",
              "enters": "38",
              "exits": "8",
              "code": "02"
            },
            {
              "startTime": "060000",
              "enters": "82",
              "exits": "25",
              "code": "02"
            },
            {
              "startTime": "070000",
              "enters": "185",
              "exits": "74",
              "code": "01"
            },
            {
              "startTime": "080000",
              "enters": "532",
              "exits": "286",
              "code": "02"
            },
            {
              "startTime": "090000",
              "enters": "1280",
              "exits": "766",
              "code": "01"
            },
            {
              "startTime": "100000",
              "enters": "1927",
              "exits": "1443",
              "code": "01"
            },
            {
              "startTime": "110000",
              "enters": "2539",
              "exits": "2109",
              "code": "01"
            },
            {
              "startTime": "120000",
              "enters": "3070",
              "exits": "2790",
              "code": "01"
            },
            {
              "startTime": "130000",
              "enters": "3354",
              "exits": "3347",
              "code": "01"
            },
            {
              "startTime": "140000",
              "enters": "3066",
              "exits": "3105",
              "code": "01"
            },
            {
              "startTime": "150000",
              "enters": "3057",
              "exits": "3192",
              "code": "01"
            },
            {
              "startTime": "160000",
              "enters": "2710",
              "exits": "3070",
              "code": "01"
            },
            {
              "startTime": "170000",
              "enters": "2411",
              "exits": "2846",
              "code": "01"
            },
            {
              "startTime": "180000",
              "enters": "1392",
              "exits": "2111",
              "code": "01"
            },
            {
              "startTime": "190000",
              "enters": "788",
              "exits": "1097",
              "code": "01"
            },
            {
              "startTime": "200000",
              "enters": "249",
              "exits": "431",
              "code": "01"
            },
            {
              "startTime": "210000",
              "enters": "75",
              "exits": "137",
              "code": "01"
            },
            {
              "startTime": "220000",
              "enters": "19",
              "exits": "113",
              "code": "02"
            },
            {
              "startTime": "230000",
              "enters": "9",
              "exits": "49",
              "code": "02"
            }
          ]
        }
      ]
    },

我已经尝试了一切,但似乎不能展平它得到下面的表使用python/jupyter笔记本

Date           Store ID     Traffic Start Time  Enters  Exits   Code
26/09/2023  Store 1          000000                 1   6   02
26/09/2023  Store 1          010000                 4   2   02
26/09/2023  Store 1          020000                 1   1   02
26/09/2023  Store 1          030000                 1   0   02
hgc7kmma

hgc7kmma1#

要使用Python将您提供的分层JSON结构转换为扁平化CSV格式,您可以使用pandas库。首先,您需要解析JSON,然后将其展平。以下是实现此目标的分步指南:
如果你还没有安装pandas。您可以使用pip安装:

pip install pandas

接下来,您可以使用以下Python代码将JSON转换为CSV:

import pandas as pd
from datetime import datetime

# Your JSON data
data = {
    "sites": [
        {
            "storeID": "Store 1",
            "siteTraffic": [
                {
                    "traffic": [
                        {
                            "startTime": "000000",
                            "enters": "1",
                            "exits": "6",
                            "code": "02"
                        },
                        # ... other traffic data
                    ]
                }
            ]
        }
    ]
}

# Flatten the JSON
flattened_data = []

for site in data["sites"]:
    storeID = site["storeID"]
    for site_traffic in site["siteTraffic"]:
        for traffic_data in site_traffic["traffic"]:
            start_time = datetime.strptime(traffic_data["startTime"], "%H%M%S").strftime("%H:%M:%S")
            flattened_data.append({
                "Date": "26/09/2023",  # You can customize the date
                "Store ID": storeID,
                "Traffic Start Time": start_time,
                "Enters": traffic_data["enters"],
                "Exits": traffic_data["exits"],
                "Code": traffic_data["code"]
            })

# Create a DataFrame from the flattened data
df = pd.DataFrame(flattened_data)

# Save the DataFrame to a CSV file
df.to_csv("traffic_data.csv", index=False)

请确保根据您的要求自定义日期和文件名。这段代码将创建一个名为“traffic_data.csv”的CSV文件,其中包含扁平化的数据。然后,您可以在Excel或任何其他电子表格软件中打开此CSV文件,以表格格式查看数据。

相关问题