@m151

Как сделать преобразование данных jsonb в таблицу с определенными полями?

Из яндекс форм с помощью cloud function данные передаются в базу Postgresql


Структура передаваемого JSON приведена ниже:
{answer: {
	"id":<идентификатор_ответа_на_форму>,
	"uid":"<идентификатор_пользователя>",
	"data":{
		"<идентификатор_вопроса_с_указанием_типа>":{
			"value":<ответ_на_вопрос>,
			"question":{
				"id":<идентификатор_вопроса>,
				"slug":"<идентификатор_вопроса_с_указанием_типа>",
				"options":{
					<параметры_вопроса>
				},
				"answer_type":{
					"id":<идентификатор_типа_вопроса>,"slug":"<тип_вопроса>"
				}
			}		
		}
	},
"survey":{
	"id":"<идентификатор_формы>"
	},
"created":"<дата_ответа>",
"cloud_uid":"<идентификатор_пользователя>"
}
 {
	"id":<идентификатор_ответа_на_форму>,
	"uid":"<идентификатор_пользователя>",
	"data":{
		"<идентификатор_вопроса_с_указанием_типа>":{
			"value":<ответ_на_вопрос>,
			"question":{
				"id":<идентификатор_вопроса>,
				"slug":"<идентификатор_вопроса_с_указанием_типа>",
				"options":{
					<параметры_вопроса>
				},
				"answer_type":{
					"id":<идентификатор_типа_вопроса>,"slug":"<тип_вопроса>"
				}
			}		
		}
	},
"survey":{
	"id":"<идентификатор_формы>"
	},
"created":"<дата_ответа>",
"cloud_uid":"<идентификатор_пользователя>"
...........


Как сделать так, чтобы из сохраняемого JSON создать новую таблицу, которая содержит поля:
id-question: "идентификатор_вопроса_с_указанием_типа"
answer: "value":<ответ_на_вопрос>
date: "created":"<дата_ответа>"

и далее объединить с таблицей, где будут поля
row_number: "числовой порядок вопросов" 1,2,3,4........ 230
id-question: "идентификатор_вопроса_с_указанием_типа"
  • Вопрос задан
  • 84 просмотра
Решения вопроса 1
@alexalexes
Как сделать так, чтобы из сохраняемого JSON создать новую таблицу

Такой скрипт не должен создавать новые структуры в СУБД, он должен делать только вставки записей (insert-ы) в заранее подготовленные таблицы на этапе проектирования базы данных.

id-question: "идентификатор_вопроса_с_указанием_типа"
answer: "value":<ответ_на_вопрос>
date: "created":"<дата_ответа>"

Вот и создайте эту структуру ручками, create table вам в помощь.
и далее объединить с таблицей, где будут поля

Опять же, при вставке данных в базе не должно происходить модификации самой структуры базы.
Вы при выборке данных сопоставляете данные из одной таблицы с другой таблицей при помощи внешних ключей.
Запрос выборки будет иметь конструкцию join:
select *
 from  Answer A
  join Question Q on Q.id_question = A.id_question -- как раз соединение по ключам
  ...

В общем, учите мат. часть по реляционным СУБД.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы