Преобразование Excel в Json в Dataweave 2.0
У меня есть таблица Excel. Я хочу, чтобы он был сопоставлен с профилем json.
Я хочу преобразовать в json как
[
{
"Scope" : {
"Content owner" : "",
"Language" : "",
"Territory" : ""
},
"Title" : {
"Content ID" : "",
"Billing ID" : "",
"IMDB" : "",
"Name" : "",
"Episode Number" : "",
"Episode Sequence" : "",
"Container Position" : "",
"Run Length" : "",
"Work Type" : "",
"Short Synopsis" : "",
"Long Synopsis" : "",
"Original Language" : "",
"Rating Set1" : "",
"Rating Set2" : "",
"Rating Set3" : "",
"Rating Set4" : "",
"Rating Set5" : "".....
Вот так... строка будет основным объектом, а следующая строка будет вторым объектом... а затем будут отображены фактические данные. Я пробовал, но не могу получить его динамически. Я использовал некоторые значения статического индекса, но результат меня не удовлетворил.
Любая помощь приветствуется
Спасибо!
1 ответ
Dataweave не сможет решить эту проблему на 100% динамическим способом. Вы можете попробовать использовать следующее выражение:
%dw 2.0
output application/json
//endIndex: use -1 to include all remaining fields
fun addFields(item, startColIdx, endColIdx) =
(item pluck (value, key, index) -> (key): value) filter ($$ >= startColIdx and (endColIdx == -1 or $$ <= endColIdx)) reduce ($$ ++ $)
---
payload map(item, index) -> {
'Scope': addFields(item, 0, 2),
'Title': addFields(item, 3, -1)
}
Вы можете использовать другую версию вышеуказанного выражения, но вместо того, чтобы рассматривать индекс начального и конечного столбца, вы можете рассмотреть индекс начального столбца и количество столбцов (получить 3 столбца, начиная с индекса 0, вместо получения столбцов от индекса столбца 0 до индекса столбца 2):
%dw 2.0
output application/json
//endIndex: use -1 to include all remaining columns
fun addFields(item, startColIdx, colCnt) =
(item pluck (value, key, index) -> (key): value) filter ($$ >= startColIdx and (colCnt == -1 or $$ < startColIdx + colCnt)) reduce ($$ ++ $)
---
payload map(item, index) -> {
'Scope': addFields(item, 0, 3),
'Title': addFields(item, 3, -1)
}