首页 > 解决方案 > JSON对象中的关键存在(Mule 4)

问题描述

我需要检查 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

根据变量的值,我需要有不同的字符串值。上面需要什么改变才能工作?

标签: mulemule-studiodataweavemule-componentanypoint-studio

解决方案


我正在考虑使用“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 对象数组,而不是字符串。

编辑:

一种更动态的方法可以是这个:

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

推荐阅读