You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.13 15:32:48