如何用MuleSoft DataWeave将Okta API的JSON转指定CSV?
DataWeave脚本处理Okta API数据生成CSV
需求回顾
- 仅保留
signOnMode为SAML_2_0的应用条目 - 提取
id、label字段,并从settings.signOn中解析出ssoAcsUrl - 输出为带表头的CSV格式
场景1:ssoAcsUrl为直接字段
如果Okta返回的JSON中settings.signOn包含直接的ssoAcsUrl字段,使用以下脚本:
示例输入JSON
[ { "id": "app123", "label": "HR系统", "signOnMode": "SAML_2_0", "settings": { "signOn": { "ssoAcsUrl": "https://hr.example.com/saml/acs" } } }, { "id": "app456", "label": "项目管理工具", "signOnMode": "OAUTH2", "settings": { "signOn": { "clientId": "abc123" } } } ]
DataWeave脚本
%dw 2.0 output application/csv header=true --- payload // 过滤仅保留SAML 2.0类型的应用 filter $.signOnMode == "SAML_2_0" // 映射提取目标字段 map { Id: $.id, Label: $.label, SSO_ACS_URL: $.settings.signOn.ssoAcsUrl }
输出CSV
Id,Label,SSO_ACS_URL app123,HR系统,https://hr.example.com/saml/acs
场景2:ssoAcsUrl藏在键值对字符串中
如果settings.signOn是类似ssoAcsUrl=https://xxx.com/acs;entityId=urn:xxx的键值对字符串,需要先解析提取:
示例输入JSON片段
{ "id": "app789", "label": "财务系统", "signOnMode": "SAML_2_0", "settings": { "signOn": "ssoAcsUrl=https://finance.example.com/saml/acs;entityId=urn:finance:example" } }
DataWeave脚本
%dw 2.0 output application/csv header=true // 自定义函数:从键值对字符串中提取ssoAcsUrl fun getAcsUrl(signOnString: String): String = (signOnString splitBy ";" map ($ splitBy "=") filter ($[0] == "ssoAcsUrl") default [])[0][1] default "" --- payload filter $.signOnMode == "SAML_2_0" map { Id: $.id, Label: $.label, SSO_ACS_URL: getAcsUrl($.settings.signOn) }
输出CSV
Id,Label,SSO_ACS_URL app789,财务系统,https://finance.example.com/saml/acs
内容的提问来源于stack exchange,提问作者Jordan M
相关产品推荐
相关产品推荐

