You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

IBM Cloudant与Python对接:嵌套JSON提取及DataFrame构建

嘿,既然已经搞定了Cloudant和Python的连接,接下来处理嵌套JSON转DataFrame这件事就很清晰了。我给你拆解成几步来做,保证你能快速上手~

步骤1:从Cloudant获取目标嵌套JSON文档

假设你已经用cloudant库完成了客户端初始化和登录,直接获取目标数据库里的文档即可:

from cloudant.client import Cloudant

# 这里替换成你的Cloudant账号信息
client = Cloudant("你的用户名", "你的API密钥", url="https://你的账号域名.cloudantnosqldb.appdomain.cloud")
client.connect()

# 定位到目标数据库和文档
target_db = client["你的数据库名称"]
target_doc = target_db["1"]  # 示例文档的_id是"1",替换成你的文档ID
nested_json_data = target_doc.get()  # 拿到完整的嵌套JSON结构
client.disconnect()
步骤2:逐层解析嵌套JSON,提取核心字段

你的JSON是多层嵌套结构:payload -> devices -> modules -> dashboard_data,我们需要逐层遍历,把分散在不同层级的关键信息整合到统一的结构化数据里。比如要提取设备ID、模块ID、温度、湿度这些字段:

import pandas as pd

# 初始化空列表存储提取后的数据
structured_data = []

# 遍历顶层的devices列表
for device in nested_json_data["payload"]["devices"]:
    device_id = device["_id"]
    device_last_date = device["last_date"]
    # 遍历每个设备下的modules列表
    for module in device["modules"]:
        module_id = module["_id"]
        module_last_seen = module["last_seen"]
        # 提取仪表盘核心数据
        dashboard_info = module["dashboard_data"]
        # 把所有需要的字段打包成字典
        data_row = {
            "主文档ID": nested_json_data["_id"],
            "设备ID": device_id,
            "设备最后更新时间戳": device_last_date,
            "模块ID": module_id,
            "模块最后上线时间戳": module_last_seen,
            "仪表盘UTC时间": dashboard_info["time_utc"],
            "温度": dashboard_info["Temperature"],
            "湿度": dashboard_info["Humidity"],
            "最低温度": dashboard_info["min_temp"],
            "最高温度": dashboard_info.get("max_temp"),  # 用get避免字段缺失报错
            "最低温度时间戳": dashboard_info["date_min_temp"],
            "最高温度时间戳": dashboard_info["date_max_temp"]
        }
        structured_data.append(data_row)
步骤3:将结构化数据转为DataFrame

现在只需要把列表传入pd.DataFrame(),就能得到你需要的表格了:

final_df = pd.DataFrame(structured_data)
# 可选:把时间戳转成可读的日期格式
final_df["设备最后更新时间"] = pd.to_datetime(final_df["设备最后更新时间戳"], unit="s")
final_df["仪表盘UTC时间"] = pd.to_datetime(final_df["仪表盘UTC时间"], unit="s")

print(final_df.head())
额外实用提示
  • 如果要处理多个文档,只需要在外层加一个遍历数据库文档的循环即可:
    for doc in target_db:
        nested_json = doc.get()
        # 重复上面的提取逻辑...
    
  • 对于可能缺失的字段,一定要用dict.get(key, 默认值)来避免KeyError崩溃;
  • 如果需要筛选特定文档,可以用Cloudant的查询功能(比如target_db.get_query_result())提前过滤,减少数据处理量。

内容的提问来源于stack exchange,提问作者emily.mi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 07:57:00