Tengo una hoja de Excel. Quiero que se asigne a un perfil json.

datos de Excel de muestra

Quiero convertir en json como

[
  {
    "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" : "".....

Así ... la fila sería el objeto principal y la siguiente fila sería el segundo objeto ... y luego se mapearán los datos reales. Lo intenté pero no puedo obtenerlo dinámicamente. Usé algunos valores de índice estático pero no estaba satisfecho con el resultado.

Cualquier ayuda es apreciada

¡Gracias!

0
Buddu sri lalitha 27 ago. 2020 a las 10:06

1 respuesta

La mejor respuesta

Dataweave no podrá resolverlo al 100% de forma dinámica. Puede intentar utilizar la siguiente expresión:

%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)
}

Puede usar otra versión de la expresión anterior, pero en lugar de considerar el índice de la columna inicial y final, podría considerar el índice de la columna inicial y el recuento de la columna (obtenga 3 columnas comenzando desde el índice 0 en lugar de obtener columnas desde el índice 0 hasta el índice 2 de la columna ):

%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)
}
2
olamiral 27 ago. 2020 a las 15:06