Преобразование Excel в Json в Dataweave 2.0

У меня есть таблица Excel. Я хочу, чтобы он был сопоставлен с профилем json.

образец данных Excel

Я хочу преобразовать в 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)
}
Другие вопросы по тегам