Залить дневную таблицу из глубоко вложенного объекта JSON - PullRequest
3 голосов
/ 16 октября 2019

Я пытаюсь взять большой, глубоко вложенный объект 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               |
...