从深度嵌套的JSON对象回填每日表格

时间:2019-10-16 15:07:27

标签: python json pandas etl hubspot

我正在尝试获取一个大型的,深度嵌套的JSON对象,该对象包含我们的营销CRM中的所有联系人及其属性,并将其转换为回填每日表格。

对象来自this api endpoint,其参数为“属性模式” = value_and_history。

JSON对象包含CRM中每个联系人记录的对象列表,其中包含另一个嵌套对象,该嵌套对象的所有属性都与相应的联系人记录相关联(每个联系人都需要回填20-80个唯一属性) )。

在包含属性的对象中,有一个嵌套的对象列表(下面的示例中为“版本”),其中包含属性值和属性更新时的时间戳。

示例JSON对象:

{
  "contacts": [
    {
      "addedAt": 1390574181854,
      "uniqueContactId": 204727,
      "canonical-vid": 204727,
      "portal-id": 62515,
      "properties": {
        "leadScore": {
          "value": "50",
          "versions": [
            {
              "value": "50",
              "timestamp": 1493910688065
            },
            {
              "value": "25",
              "timestamp": 1494022165157
            },
            {
              "value": "30",
              "timestamp": 1493011165157
            }
          ]
        },
        "lifecycleStage": {
          "value": "salesQualifiedLead",
          "versions": [
            {
              "value": "salesQualifiedLead",
              "timestamp": 1493911260146
            },
            {
              "value": "marketingQualifiedLead",
              "timestamp": 1493911177118
            },
            {
              "value": "lead",
              "timestamp": 1493011165157
            }
          ]
        }
      }
    }
  ]
}

我已将对象展平为以下结构中的数据框;

| contactId  | timestamp     | propertyName   | propertyValue          | 
|------------|---------------|----------------|------------------------|
| 204727     | 1493910688065 | leadScore      | 50                     |
| 204727     | 1494022165157 | leadScore      | 25                     |
| 204727     | 1494012165567 | leadScore      | 30                     |
| 204727     | 1493911260146 | lifecycleStage | salesQualifiedLead     |
| 204727     | 1493911177118 | lifecycleStage | marketingQualifiedLead |
| 204727     | 1493910832532 | lifecycleStage | lead                   |

我不确定是否采用这种方法走了正确的路。我认为我可以透视此数据框并将其连接到日期维度表,然后对数据框进行分组和填充,但是同样,我不确定这是否是最佳方法。

我要查找的最终结果是一个数据框,其中包含从addAt天到当天的每一天的每个联系人的记录,每个属性的列,包含给定日期该属性的值。

e.x。

|dim_date  | contactId  | added_at      | leadScore | lifecycleStage    | 
|----------|------------|---------------|-----------|-------------------|
|2019-10-16| 204727     | 2014-01-24    | 50        |salesQualifiedLead |
| [...]                                                                 |
|2017-05-04| 204727     | 2014-01-24    | 50        |salesQualifiedLead |
| [...]                                                                 |
|2017-04-24| 204727     | 2014-01-24    | 25        |lead               |

0 个答案:

没有答案