2016-08-04 1 views
0

У меня есть JSON объектКак отобразить сложный объект DataWeave фиксированной ширины формата

{ 
    "collection": [ 
     { 
     "field1": "1111", 
     "field2": "1122" 
     }, 
     { 
     "field1": "2211", 
     "field2": "2222" 
     } 
    ], 
    "otherObject": { 
     "otherField": "3333" 
    } 
} 

Я хотел бы, чтобы этот вывод:

s01> 1111 ~~~~~~ 1122 ~~~~~~

s01> 2211 ~~~~~~ 2222 ~~~~~~

s02> 3333 ~~~~~~

Так я использовал это преобразование:

%dw 1.0 
%output text/plain structureIdent = "response" , schemaPath = "response.ffd" 

--- 
{ 
    collection: payload.collection map ({ 
     field1: $.field1, 
     field2: $.field2 
    }), 
    otherObject: { 
     otherField: payload.otherObject.otherField 
    } 
} 

и мой response.ffd подобен этому

form: FIXEDWIDTH 
    structures: 
    - id: 'response' 
    name: response 
    tagStart: 0 
    data: 
    - { idRef: 'collection', count: '>1'} 
    - { idRef: 'otherObject', count: 1 } 
    segments: 
    - id: 'collection' 
    name: collection 
    tag: 's01>' 
    values: 
    - { name: 'field1', type: String, length: 10 } 
    - { name: 'field2', type: String, length: 10 } 
    - id: 'otherObject' 
    name: otherObject 
    tag: 's02>' 
    values: 
    - { name: 'otherField', type: String, length: 10 } 

Но я получаю этот результат

s02>3333~~~~~~ 

, как будто dataweave не знает о моем массиве, что я должен делать с заставить его работать?

ответ

2

Изменить код DataWeave на следующем примере:

%dw 1.0 
%output text/plain structureIdent = "response" , schemaPath = "response.ffd" 
--- 
{ 
    collection: flatten [payload.collection map ({ 
     field1: $.field1, 
     field2: $.field2 
    })], 
    otherObject: { 
     otherField: payload.otherObject.otherField 
    } 
} 
  1. обеспечивает сбор является массив, добавив кронштейн: [ ... map ...]
  2. Снимите дополнительный кронштейн при помощи flatten, потому что сам map уже вернуться a Array

Хотя он возвращает тот же результат, как-то DataWeave tre ats его по-разному, как если бы структура данных записывалась вручную: например,

collection: [{ 
    field1: payload.collection.field1[0], 
    field2: payload.collection.field2[0] 
},{ 
    field1: payload.collection.field1[1], 
    field2: payload.collection.field2[1] 
}] 
+0

Большое спасибо, это сработало как очарование! Однако это не решение, которое мы могли бы найти в документации по передаче данных :) –

Смежные вопросы