Мне нужно преобразовать ниже вложенный JSON в плоский и загрузить в базу данных.
Вложенный JSON в Flatten
Ввод JSON:
{
"Report_Entry": [
{
"ContractNumber": "1111111",
"Company": "ABCD INC."
"Contract_Lines_group": [
{
"LineShipToCustomer": "GOOD INC.",
"LineReferenceId": "123456789_EXP"
},
{
"LineShipToCustomer": "XYZ TELECOM",
"LineReferenceId": "123456789_TIME"
}
],
"ContractName": "TEST Contract",
"ReferenceId": "123456789"
},
{
"ContractNumber": "222222",
"Company": "FASLSE NEWS INC."
"Contract_Lines_group": [
{
"LineShipToCustomer": "LIVE NEWS INC.",
"LineReferenceId": "789999_EXP"
},
{
"LineShipToCustomer": "SKY NEWS INC.",
"LineReferenceId": "789999_TIME"
}
],
"ContractName": "FALSE NEWS Contract",
"ReferenceId": "6789999"
}
]
}
Ожидаемый текстовый вывод:
ContractNumber|Company|LineShipToCustomer|LineReferenceId|ContractName|ReferenceId
\-- Set 1
1111111|ABCD INC|GOOD INC|123456789_EXP|TEST Contract|123456789
1111111|ABCD INC|XYZ TELECOM|123456789_TIME|TEST Contract|123456789
\-- Set 2
222222|FASLSE NEWS INC.|LIVE NEWS INC.|789999_EXP|FALSE NEWS Contract|6789999
222222|FASLSE NEWS INC.|SKY NEWS INC.|789999_TIME|FALSE NEWS Contract|6789999
Выход (JSON):
[
{
"ContractNumber": "1111111",
"Company": "ABCD INC."
"Contract_Lines_group": [
{
"LineShipToCustomer": "GOOD INC.",
"LineReferenceId": "123456789_EXP"
}
],
"ContractName": "TEST Contract",
"ReferenceId": "123456789"
},
{
"ContractNumber": "1111111",
"Company": "ABCD INC."
"Contract_Lines_group": [
{
"LineShipToCustomer": "XYZ TELECOM",
"LineReferenceId": "123456789_TIME"
}
],
"ContractName": "TEST Contract",
"ReferenceId": "123456789"
} ,
{
"ContractNumber": "222222",
"Company": "FASLSE NEWS INC."
"Contract_Lines_group": [
{
"LineShipToCustomer": "LIVE NEWS INC.",
"LineReferenceId": "789999_EXP"
}
],
"ContractName": "FALSE NEWS Contract",
"ReferenceId": "123456789",
},
{
"ContractNumber": "222222",
"Company": "FASLSE NEWS INC."
"Contract_Lines_group": [
{
"LineShipToCustomer": "SKY NEWS INC.",
"LineReferenceId": "789999_TIME"
}
],
"ContractName": "FALSE NEWS Contract",
"ReferenceId": "6789999",
}
]
А что такое "Набор 1" и "Набор 2" на выходе?
Обратите внимание, что введенный вами JSON недействителен, поскольку в нем отсутствуют запятые в ключе Company
.
Я предполагаю, что вам нужно преобразовать входной JSON в выходной CSV, используя символ вертикальной черты |
в качестве разделителя. Вам необходимо сопоставить каждый из внутренних элементов строки с записью.
Вы можете использовать функцию flatten(), однако Mule 4 имеет более удобную функцию для одновременного сопоставления и сглаживания: flatMap().
Пример:
%dw 2.0
output application/csv separator = "|"
---
payload.Report_Entry flatMap ((item, order) ->
item.Contract_Lines_group map ((line, lineOrder) -> {
ContractNumber: item.ContractNumber,
Company: item.Company,
LineShipToCustomer: line.LineShipToCustomer,
LineReferenceId: line.LineReferenceId,
ContractName: item.ContractName,
ReferenceId: item.ReferenceId
})
)
Выход:
ContractNumber|Company|LineShipToCustomer|LineReferenceId|ContractName|ReferenceId
1111111|ABCD INC.|GOOD INC.|123456789_EXP|TEST Contract|123456789
1111111|ABCD INC.|XYZ TELECOM|123456789_TIME|TEST Contract|123456789
222222|FASLSE NEWS INC.|LIVE NEWS INC.|789999_EXP|FALSE NEWS Contract|6789999
222222|FASLSE NEWS INC.|SKY NEWS INC.|789999_TIME|FALSE NEWS Contract|6789999
Большое спасибо, Алед, очень ценю ваше решение! пытается загрузить "выходные данные" в базу данных. какой метод нужно использовать для преобразования данных csv в записи и загрузки в базу данных. Вставьте в db_table(ContractNumber,Company|LineShipToCustomer,LineReferenceId,ContractName,ReferenceId) значения ('1111111', 'ABCD INC.','GOOD INC.','123456789_EXP','TEST Contract','123456789' ); .... вставить до последней записи (зацикливание/массовая вставка)
Вы должны задать другой вопрос для части базы данных и оставить этот вопрос для преобразования в CSV. Обратите внимание, что нет необходимости конвертировать в CSV для вставки в базу данных. application/java
будет лучшим выходом для этого. Пожалуйста, не стесняйтесь принимать / голосовать за ответ, чтобы показать, что он действителен для сообщества.
Большое спасибо!! Код проверен и работает!!! отличная поддержка!!!
Привет @махари. Когда вы говорите «сгладить», вы имеете в виду текст «плоский файл»? Оба термина имеют разное и специфическое значение в DataWeave.
flatten()
— это функция, которая используется для создания простого массива из вложенных массивов и не имеет никакого отношения к вашему вопросу. Плоские файлы представляют собой текстовые файлы фиксированной длины, которые, похоже, не являются вашим выводом. Что такое вывод JSON, если ожидаемый вывод «текст»? Также объясните сопоставление входного JSON с текстовым выводом. Вопрос в том, как сгенерировать ожидаемый результат или как на самом деле загрузить в базу данных?