【问题标题】:How do I flatten nested list from JSON object?如何从 JSON 对象展平嵌套列表?
【发布时间】:2022-01-19 21:50:48
【问题描述】:

我已经导出了 fitbit 睡眠数据,并得到了一个包含嵌套变量 + dict 的 json 文件。我想将 json 文件转换为 csv 文件,该文件将显示所有“常规”变量,例如“dateOfSleep”还有嵌套变量,例如包含所有字典信息的“深度”和“唤醒”。

我试过 json_normalize;但我只能使它适用于第一个嵌套变量,例如“水平”。有人有想法吗?

非常感谢。

[{
  "logId" : 32072056107,
  "dateOfSleep" : "2021-05-08",
  "startTime" : "2021-05-07T23:22:00.000",
  "endTime" : "2021-05-08T08:05:30.000",
  "duration" : 31380000,
  "minutesToFallAsleep" : 0,
  "minutesAsleep" : 468,
  "minutesAwake" : 55,
  "minutesAfterWakeup" : 0,
  "timeInBed" : 523,
  "efficiency" : 93,
  "type" : "stages",
  "infoCode" : 0,
  "levels" : {
    "summary" : {
      "deep" : {
        "count" : 5,
        "minutes" : 85,
        "thirtyDayAvgMinutes" : 68
      },
      "wake" : {
        "count" : 30,
        "minutes" : 55,
        "thirtyDayAvgMinutes" : 56
      },
      "light" : {
        "count" : 30,
        "minutes" : 267,
        "thirtyDayAvgMinutes" : 235
      },
      "rem" : {
        "count" : 10,
        "minutes" : 116,
        "thirtyDayAvgMinutes" : 94
      }
    },
.....

【问题讨论】:

  • pd.json_normalize 至少适用于您在此处提供的数据
  • json_normalize 适用于您的数据样本。

标签: python json pandas csv json-normalize


【解决方案1】:

使用pd.json_normalize,所有嵌套层级都被展平并用点连接(默认情况下):

import pandas as pd
import json

with open('data.json') as fp:
    data = json.load(fp)
    df = pd.json_normalize(data)

输出:

>>> df
         logId dateOfSleep                startTime  ... levels.summary.rem.count  levels.summary.rem.minutes  levels.summary.rem.thirtyDayAvgMinutes
0  32072056107  2021-05-08  2021-05-07T23:22:00.000  ...                       10                         116                                      94

[1 rows x 25 columns]

data.json的内容:

[{
  "logId" : 32072056107,
  "dateOfSleep" : "2021-05-08",
  "startTime" : "2021-05-07T23:22:00.000",
  "endTime" : "2021-05-08T08:05:30.000",
  "duration" : 31380000,
  "minutesToFallAsleep" : 0,
  "minutesAsleep" : 468,
  "minutesAwake" : 55,
  "minutesAfterWakeup" : 0,
  "timeInBed" : 523,
  "efficiency" : 93,
  "type" : "stages",
  "infoCode" : 0,
  "levels" : {
    "summary" : {
      "deep" : {
        "count" : 5,
        "minutes" : 85,
        "thirtyDayAvgMinutes" : 68
      },
      "wake" : {
        "count" : 30,
        "minutes" : 55,
        "thirtyDayAvgMinutes" : 56
      },
      "light" : {
        "count" : 30,
        "minutes" : 267,
        "thirtyDayAvgMinutes" : 235
      },
      "rem" : {
        "count" : 10,
        "minutes" : 116,
        "thirtyDayAvgMinutes" : 94
      }
    }
  }
}]

【讨论】:

    猜你喜欢
    • 2021-10-19
    • 2012-05-29
    • 2020-03-02
    • 1970-01-01
    • 2017-01-21
    • 2018-10-24
    • 2016-12-01
    • 1970-01-01
    相关资源
    最近更新 更多