首页 > 解决方案 > 平面 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"
  }
]

标签: jsondataweave

解决方案


也许您可以对此进行优化。

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



推荐阅读