json - 平面 json 到结构化映射
问题描述
如何在 dataweave 2.0 中映射以下内容 .. 我能够拆分第一个元素 .. 我需要根据输入中的第一个元素形成我的列表,并在适当的索引下解析出剩余的元素。例如,当存在第 5 个值 something.pem 时,将会有后续值,并且需要填充输出数组
%dw 2.0
output application/json
---
payload[0] splitBy (/\s/)
map (certs, index) -> {
certsname: certs,
validfrome: (payload filter ($$<=4)) [index+1],
validto: (payload filter ($$<=4)) [index+2],
issuer: (payload filter ($$<=4)) [index+3],
subject: (payload filter ($$<=5)) [index+4]
}
输入
[
"auth0.pem maximo.cer synovos.pem veevavault.pem",
"notBefore=Apr 30 00:00:00 2020 GMT",
"notAfter=May 30 12:00:00 2021 GMT",
"issuer= /C=US/O=Amazon/OU=Server CA 1B/CN=Amazon",
"subject= /CN=auth0.com",
"notBefore=Feb 5 18:02:21 2020 GMT",
"notAfter=Apr 5 18:44:22 2021 GMT",
"issuer= /C=US/ST=Arizona/L=Scottsdale/O=Starfield Technologies, Inc./OU=http://certs.starfieldtech.com/repository//CN=Starfield Secure Certificate Authority - G2",
"subject= /OU=Domain Control Validated/CN=*.corp.amazon.com",
"notBefore=Aug 1 17:57:31 2020 GMT",
"notAfter=Aug 15 17:57:31 2020 GMT",
"issuer= /C=US/ST=California/O=Zscaler Inc./OU=Zscaler Inc./CN=Zscaler Intermediate Root CA (zscloud.net) (t)",
"subject= /OU=Domain Control Validated/CN=*.synovos.com",
"notBefore=Jan 23 00:00:00 2018 GMT",
"notAfter=Jan 27 12:00:00 2021 GMT",
"issuer= /C=US/O=DigiCert Inc/CN=DigiCert SHA2 Secure Server CA",
"subject= /C=US/ST=California/L=Pleasanton/O=Veeva Systems, Inc./OU=Vault/CN=*.veevavault.com"
]
到输出
[
{
"certsname": "auth0.pem",
"validfrome": "notBefore=Apr 30 00:00:00 2020 GMT",
"validto": "notAfter=May 30 12:00:00 2021 GMT",
"issuer": "issuer= /C=US/O=Amazon/OU=Server CA 1B/CN=Amazon",
"subject": "subject= /CN=auth0.com"
},
{
"certsname": "maximo.cer",
"validfrom": "notBefore=Feb 5 18:02:21 2020 GMT",
"validto": "Apr 5 18:44:22 2021 GMT",
"issuer": "/C=US/ST=Arizona/L=Scottsdale/O=Starfield Technologies, Inc./OU=http://certs.starfieldtech.com/repository//CN=Starfield Secure Certificate Authority - G2\"",
"subject": "subject= /OU=Domain Control Validated/CN=*.corp.amazon.com"
},
{
"certsname": "synovos.pem",
"validfrom": "notBefore=Aug 1 17:57:31 2020 GMT",
"validto": "notAfter=Aug 15 17:57:31 2020 GMT",
"issuer": "issuer= /C=US/ST=California/O=Zscaler Inc./OU=Zscaler Inc./CN=Zscaler Intermediate Root CA (zscloud.net) (t)",
"subject": "subject= /OU=Domain Control Validated/CN=*.synovos.com"
},
{
"certsname": "veevavault.pem",
"validfrom": "notBefore=Jan 23 00:00:00 2018 GMT",
"validto": "notAfter=Jan 27 12:00:00 2021 GMT",
"issuer": "issuer= /C=US/O=DigiCert Inc/CN=DigiCert SHA2 Secure Server CA",
"subject": "subject= /C=US/ST=California/L=Pleasanton/O=Veeva Systems, Inc./OU=Vault/CN=*.veevavault.com"
}
]
解决方案
也许您可以对此进行优化。
%dw 2.0
output application/json
var validFrom = ((payload map {
(($$): $) if($ contains("notBefore"))
}) - ({}))
var validTo = ((payload map {
(($$): $) if($ contains("notAfter"))
}) - ({}))
var issuer = ((payload map {
(($$): $) if($ contains("issuer"))
}) - ({}))
var subject = ((payload map {
(($$): $) if($ contains("subject"))
}) - ({}))
---
payload[0] splitBy (/\s/) map {
certsname: $,
validfrom: validFrom[$$][0],
validto: validTo[($$)][0],
issuer: issuer[$$][0],
subject: subject[$$][0]
}
推荐阅读
- javascript - typeroots 在打字稿中没有任何影响
- javascript - 如何检查数组的 id 项对象是否等于 TypeScript 中其他数组中的项对象的 id
- pandas - Dask 如何在云中的多个 vm 上执行代码
- asp.net-core - 将 .net core webapp 拆分为不同操作系统上的后端和前端
- c# - DateTimePicker UpDown 溢出
- twilio - Twilio VOIP VoiceCallBack 状态问题
- javascript - 如何在 JavaScript 中对名字、中间名和姓氏进行屏蔽?
- docker - 从 docker 图像上下文中检索我的代码库
- jquery - 在主页上显示 dofollow 但在子页面上隐藏
- c++ - 在继承类中使用 srand time null 获取相同的值