JSON对象中的密钥存在(Mule 4)

问题描述 投票:0回答:2

我需要检查JSON对象中是否存在一个特定的关键字,并在此基础上创建一个字符串。下面给出了我的dataweave 2.0示例代码。

%dw 2.0
output application/json
var arr = {
    "ID": "100",
    "ProdId": "Prod",
    "ProdName": "ABC"
           }
---
if (arr pluck $$ joinBy ';' contains "ProdId") == true
    then (String: "Product") else
if (arr pluck $$ joinBy ';' contains "EmpId") == true
    then (String: "Employee") else null

根据变量的值,我需要有不同的String值。上面需要做什么改动才能成功?

mule mule-studio dataweave mule-component anypoint-studio
2个回答
2
投票

我在考虑使用 "keysOf "函数(以前是Object::keySet)和类似的东西。

%dw 2.0
output application/json
var arr = {
    "ID": "100",
    "ProdId": "Prod",
    "ProdName": "ABC"
           }
---
if (keysOf(arr) contains("ProdId" as Key)) "Product"
else if (keysOf(arr) contains("EmpId" as Key)) "Employee"
else "Not Recognized"

请注意,"keysOf "返回的是 Key 对象的数组,而不是字符串。

EDIT:

一个更动态的方法是这样的。

%dw 2.0
output application/json
import firstWith from dw::core::Arrays
var arr = {
    "ID": "100",
    "ProdId": "Prod",
    "ProdName": "ABC"
           }
var myTypes = {
    ProdId: "Product",
    EmpId: "Employee"
}
var typeId = (keysOf(myTypes) firstWith (keysOf(arr) contains $)) as String
---
myTypes[typeId]

1
投票

你可以利用字段存在操作符 ?:

%dw 2.0
output application/json
var o = {
    "ID": "100",
    "ProdId": "Prod",
    "ProdName": "ABC"
}
---
if (o.ProdId?) (String: "Product") else 
    if (o.EmpId?) (String: "Employee") else null

您可以通过以下方法解决模式匹配的问题 match 操作员也是如此。

%dw 2.0
output application/json
var o = {
    "ID": "100",
    "ProdId": "Prod",
    "ProdName": "ABC"
}
---
"ProdId" match {
    case "ProdId" -> "String": "Product"
    case "EmpId"  -> "String": "Employee"
    else -> null
}

这里是文件。

您还需要注意的是 String 是DW中的一个类型,你必须用引号把它括起来("')作为字段名使用。

© www.soinside.com 2019 - 2024. All rights reserved.