如何解决无法使用 Dataweave 将复杂的 JSON 对象转换为 CSV
在将这个复杂的 json 对象转换为 csv 时需要一些指导或提示。我个人觉得我的输入数据不正确或不正确,这是我从以前的流程中设计的并因此获得的。任何修改我的输入 json 对象并获得所需结果的建议也将对我有所帮助。
注意 - 在这个例子中,每个 API 中有一个 APD,同样有许多 API > 和 APD。刚刚附加了我的 Json 对象的一部分。
输入 Json 对象
{
"API": {
"VendorID": "39594","InvoiceName": "December Expenses (12/01/2020)","Description": "HectorEchiveste","SumInvoiceAmount": 622.02,"InvAcctDate": "1222021","InvAcctDate2": "1222021","APD": {
"JobNumber": [
"","C8D-27-14387","","CL5-27-11934",""
],"CostCode": [
"","1000","CostCategory": [
"","M","O","GL": [
"1-20-70-6600","1-20-70-5200","1-20-70-6600","1-20-70-5500","1-20-70-6600"
],"Amount": [
"60.00","166.17","51.34","60.00","67.75","9.00","45.00","48.75","50.00","64.01"
]
}
},"API": {
"VendorID": "39849","Description": "DonaldOrtega","SumInvoiceAmount": 223.08,"InvAcctDate": "1252021","InvAcctDate2": "1252021","APD": {
"JobNumber": [
"B8G-87-15555"
],"CostCode": [
"1000"
],"CostCategory": [
"M"
],"GL": [
"1-80-70-5200"
],"Amount": [
"223.08"
]
}
}
解决方法
你能检查一下你的有效载荷吗?我收到此错误。
//
// Collection+SF.swift
// PanoAI
//
// Created by Forever Positive on 2021/1/30.
//
import Foundation
extension Array where Element == Optional<Any>{
var trimed:[Any] {
var newArray = [Any]()
for item in self{
if let item = item as? [Any?] {
newArray.append(contentsOf: item.trimed)
}else if item is NSNull || item == nil {
//skip
}else if let item = item{
newArray.append(item)
}
}
return newArray
}
}
extension Dictionary where Key == String,Value == Optional<Any> {
var trimed:[Key: Any] {
return self.compactMapValues({ v in
if let dic = v as? [String:Any?] {
return dic.trimed
}else if let _ = v as? NSNull {
return nil;
}else if let array = v as? [Any?] {
return array.trimed;
}else{
return v;
}
})
}
}
// MARK: - Usage
//let dic:[String:Any?] = ["a":"a","b":nil,"c":NSNull(),"d":["1":"1","2":nil,"3":NSNull(),"4":["a","b",nil,NSNull()]],"e":["a",NSNull()]]
//print(dic.trimed)
,
以下是我根据您当前的输入格式快速编写的一些内容:
%dw 2.0
output application/csv
var data = {
"API": {
"VendorID": "39594","InvoiceName": "December Expenses (12/01/2020)","Description": "HectorEchiveste","SumInvoiceAmount": 622.02,"InvAcctDate": "1222021","InvAcctDate2": "1222021","APD": {
"JobNumber": [
"","C8D-27-14387","","CL5-27-11934",""
],"CostCode": [
"","1000","CostCategory": [
"","M","O","GL": [
"1-20-70-6600","1-20-70-5200","1-20-70-6600","1-20-70-5500","1-20-70-6600"
],"Amount": [
"60.00","166.17","51.34","60.00","67.75","9.00","45.00","48.75","50.00","64.01"
]
}
},"API": {
"VendorID": "39849","Description": "DonaldOrtega","SumInvoiceAmount": 223.08,"InvAcctDate": "1252021","InvAcctDate2": "1252021","APD": {
"JobNumber": [
"B8G-87-15555"
],"CostCode": [
"1000"
],"CostCategory": [
"M"
],"GL": [
"1-80-70-5200"
],"Amount": [
"223.08"
]
}
}
}
---
flatten(data.*API map (vendor) -> (
vendor.APD.CostCode map (apds,idx) -> do {
var common = vendor - "APD"
var uncommon = vendor.APD pluck $$
---
{
(common),(uncommon reduce (e,acc={}) -> acc ++ {(e): vendor.APD[e][idx]})
}
}
))
我可以在有额外时间的时候简化代码。例如,如果我修改表达式,可以跳过最外层的 flatten
。
如果我是你,我希望输入数据如下所示:
[
{
"VendorID": "39594","APD": [
{
"JobNumber": "","CostCode": "","CostCategory": "","GL": "1-20-70-6600","Amount": "60.00"
},{
"JobNumber": "C8D-27-14387","CostCode": "1000","CostCategory": "M","GL": "1-20-70-5200","Amount": "166.17"
},/// .... and so on
]
},{
// ... and so on
}
]
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。