Я пытаюсь разбить несколько довольно сложных вложенных json на более рационализированный формат, но я пытаюсь расширить ключ, который меняет имя по всему набору данных.
Мой набор данных выглядит примерно так:
{
"account": {
"accountID": "test_account",
"name": "abc123",
"checks": {
"abc123": {
"check1": "pass",
"check2": "fail",
"check3": 0
},
"xzy7892": {
"check1": "pass",
"check2": "fail",
"check3": 0,
"result": {
"item1": 1,
"item2": 2
}
},
"foobar11012387": {
"check1": "fail",
"check2": "pass",
"check3": 0,
"result": {
"item1": 1,
"item2": 2
}
}
}
}
}
У меня нет контроля над схемой, и поэтому я могу работать только с тем, что мне дают. По сути, полезная нагрузка разбита на различные проверки, но каждая проверка имеет уникальное имя (abc123, xzy7892 и foobar1012387 в образце полезной нагрузки).
Учетная запись, идентификатор учетной записи и проверочные ключи являются прямыми для выбора из кадра данных.
df2.select(['account.accountID', 'account.checks']).show()
+------------+--------------------+
| accountID| checks|
+------------+--------------------+
|test_account|[[pass, fail, 0],...|
+------------+--------------------+
Но я могу пойти дальше, чем эта точка (т.е. account.checks.abc123.check1). В конечном итоге я хочу рационализировать эти три проверки в их собственные строки в кадре данных, но я не совсем уверен, как это сделать, поскольку ключ проверки изменяется.
| accountID | check_name | check1 | check2 | check3 | result |
+-----------|------------|--------|--------|--------|--------|
| test_account | abc123 | pass | fail | 0 | null |
| test_account | xyz7892 | pass | fail | 0 | [1, 2] |
| test_account | foobar11012387 | fail | pass | 0 | [1, 2] |
Я бы хотел, чтобы DF выглядел аналогично таблице выше (я не увеличивал результат, но мог бы пойти дальше). Я не знаю заранее названия тестов (например, abc123, xzy7892), и они меняются, поэтому, возможно, мне нужно сначала создать массив.
Есть мысли?