Я пытаюсь взять большой, глубоко вложенный объект JSON, который содержит все контакты и их свойства в нашей маркетинговой CRM, и преобразовать его для заполнения ежедневной таблицы.
Объект поступает из этой конечной точки API с параметром "Property Mode" = 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 |
Я не уверен, что при таком подходе я движусь по правильному пути. Я думаю, что я мог бы повернуть этот фрейм данных и соединить его с таблицей измерений даты, затем сгруппировать и заполнить фрейм данных, но, опять же, я не уверен, что это лучший подход.
Конечный результат, который я ищу, - это фрейм данных с записью для каждого контакта для каждого дня от добавленного дня до текущего дня со столбцами для каждого свойства, содержащими значение этого свойства в данный день. .
ex
|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 |